2016-06-27 16 views
-2

オブジェクトと配列の操作にAngularとLodashを使用しています。配列とオブジェクトの値の比較

$scope.week = ['monday','tuestday','wednesday','thursday','friday','saturday','sunday'] 
$scope.points = [ 
    { day: 'monday', points: 30 }, 
    { day: 'wednesday', points: 60 } 
] 

...私はこの結果を取得したい:

$scope.result = [30, 0, 60, 0, 0, 0, 0]; 

は、だから私は、オブジェクトと配列を比較することがありますが、私は使用を避けたい、この与えられた

複数のループ。

JS Fiddleを参照してください。

P.S:jQueryは使用しません。

+1

フィドルへのリンクは問題ありませんが、あなたの質問の中にそのコードを入れてください。 – trincot

+0

さて、XとYを比較したいと思います.XとYは2種類の構造体です。あなたは正確に何を比較しようとしていますか? 2つのソース構造とは何ですか?また、上記2つのソース構造の比較からどのような結果が必要ですか?方程式から角を取り除くことができ、ちょうどジャバスクリプトであるサンプルを提供できるようです。 –

答えて

-1

あなたのデータ構造の場合は、あなたがこのようなJavaScriptの配列方法を、使用することができます。

var filteredPoints = $scope.points.filter((point) => { 
     return $scope.week.indexOf(point.day) != -1; 
    }); 

$scope.result = filteredPoints.map((point) => { return point.points }); 
+0

答えがすぐに投票されたのはなぜですか? – AranS

+0

私はdownvoteをしませんでしたが、このコードを実行すると1要素の配列が得られます。 – trincot

+0

私の述語に条件が不足していましたが、今更新されました – AranS

0

あなたがこれを行うことができます:

var temp = $scope.points.reduce((obj, el) => (obj[el.day] = el.points, obj), {}); 
$scope.result = $scope.week.map(day => temp[day] || 0); 

一時変数があるオブジェクトですその日にリンクされたポイントを価値として提供します。これが第二文で効率的に検索することができます

{ 
    monday: 30, 
    wednesday: 60 
} 

:データ例を考えると、それは次のようになります。あなたの週の配列( 'tuestday')にそのスペルエラーを修正してください:

JS fiddle

NBを参照してください。

+0

問題を説明することができますか? – trincot

0

あなたは_ lodashのインスタンスである

$scope.result =_.map($scope.week, function (v, i) { 
    var index = _.findIndex($scope.points, { 'day': v}) 
    if (index > -1) { 
     return $scope.points[index].points 
    } else { 
     return 0 
    } 
}) 

以下のようlodashまたは単純なArrayクラスの_.mapと_.findIndexメトを使用することができます。

関連する問題