2016-05-20 8 views
2

Ich mache einen Filter in angular.js. Ich versuche, alle Elemente zu filtern, wenn sie die Benutzer-ID enthalten. Wie kann ich überprüfen, ob sich die Benutzer-ID im Element-Array befindet?Wie überprüft man, ob ein Wert eine Eigenschaft eines Arrays in eckigen ist?

Die ID des Benutzers ist eine Eigenschaft dieses Arrays: $ scope.items.user.id

$scope.yourItemFilter = function(item) { 

    //$scope.items is an array ($scope.items.user.id = undefined) 
    if ($.inArray(item.user.id, $scope.items.user.id)) { 
     return item; 
    } 

    return; 
} 

ich auf $ scope.items eine foreach tun könnte und dann jeden $ scope.item setzen. user.id in einem Array. Aber dies scheint nicht wie ein guter Weg, um diese

+0

Ist 'scope.items.user.id' Array $? – Rayon

+0

nein dies sollte ein Array von allen $ scope.items.user.id sein, also dachte ich zuerst, dass ich all diese mit einer foreach in ein Array setzen sollte, bevor ich diese Funktion ausführe. Aber ich bin auf der Suche nach einem besseren Weg –

Antwort

1

zu tun, ich denke, das

für Sie arbeiten
if ($.inArray(item.user, $scope.items.user) && (item.user.id == $scope.items.user[$.inArray(item.user, $scope.items.user)].id)) 
0

$.inArray gibt den Index des Elements in dem Array, bedenken Sie:

$.inArray('a', ['a', 'b', 'c']); // 0 
$.inArray('c', ['a', 'b', 'c']); // 2 
$.inArray('d', ['a', 'b', 'c']); // -1 

So müssen Sie mit dem Ausgang:

if ($.inArray('a', ['a', 'b', 'c']) > -1) { 
    // true 
} 
0

Sie einenverwenden könnteSchleife und zurück, sobald Sie ein Spiel haben:

$scope.yourItemFilter = function(item) { 
    for (var scope_item of $scope.items) { 
     if (scope_item.user.id === item.user.id) return item; 
    } 
} 

Beachten Sie, dass Sie nicht über die endgültige return müssen als Funktionen undefined standardmäßig zurück.

Eine alternative Art und Weise mit .some():

$scope.yourItemFilter = function(item) { 
    if ($scope.items.some(function (scope_item) {    
     return (scope_item.user.id === item.user.id) 
    })) return item; 
} 

Oder wenn Sie ES6 Pfeil Unterstützung haben:

+0

Könnten Sie ein Feedback geben, ob diese oder eine andere Antwort Ihre Frage beantwortet? – trincot