2016-06-27 10 views
-2

Ich benutze Angular und Lodash zum Arbeiten mit Objekten und Arrays.Werte zwischen Array und Objekt vergleichen

Vor diesem Hintergrund:

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

... Ich möchte dieses Ergebnis erhalten:

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

Also muß ich ein Array mit einem Objekt vergleichen, aber ich mag die Verwendung von vermeiden mehrere Schleifen.

Siehe JS Fiddle.

S.S: Ich verwende jQuery nicht.

+1

Ein Link zu einer Geige ist in Ordnung, aber bitte fügen Sie diesen Code auch in Ihre Frage ein. – trincot

+0

Ok, also, Sie wollen X und Y vergleichen, wobei X und Y zwei verschiedene Arten von Strukturen sind. Was genau versuchst du zwischen ihnen zu vergleichen? Was sind die beiden Quellstrukturen und welches Ergebnis wollen Sie aus dem Vergleich dieser beiden Quellstrukturen ziehen? scheint, dass Sie Winkel aus der Gleichung entfernen und ein Beispiel bereitstellen können, das nur Javascript ist. –

Antwort

-1

Bei der Datenstruktur, können Sie Javascript Array Methoden wie folgt verwenden:

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

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

Warum werden die Antworten sofort abgelehnt? – AranS

+0

Ich habe nicht downvote, aber die Ausführung dieses Codes gibt mir ein Array mit 1 Element. – trincot

+0

Mein Prädikat fehlte eine Bedingung, es ist jetzt aktualisiert – AranS

0

Sie können dies tun:

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

Die Temp Variable ist ein Objekt, das ist wird am Tag eingegeben und liefert als Wert die mit diesem Tag verbundenen Punkte. Angesichts der Beispieldaten würde es wie folgt aussehen:

Es ermöglicht eine effiziente Suche in der zweiten Anweisung.

Siehe JS fiddle

NB: Stellen Sie sicher, dass die Rechtschreibfehler in Ihrer Woche Array zu korrigieren ('tuestday').

+0

Könnte der Downvoter erklären, was das Problem ist? – trincot

0

Sie können wie unten

$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 
    } 
}) 

Wo _ ist eine Instanz lodash _.map und _.findIndex metho von lodash oder einfacher Array-Klasse verwenden.

Verwandte Themen