如何检查值是否是角度数组的属性?

时间:2016-05-20 07:53:44

标签: javascript arrays angularjs angularjs-filter

我正在angular.js中制作一个过滤器。我试图过滤所有项目,如果它们包含用户ID。如何检查用户ID是否在items数组中?

用户的id是此数组的属性:$ 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;
}

我可以在$ scope.items上做一个foreach,然后将每个$ scope.item.user.id放在一个数组中。但这似乎不是一个很好的方法来做到这一点

3 个答案:

答案 0 :(得分:1)

我认为这对你有用

if ($.inArray(item.user, $scope.items.user) && (item.user.id == $scope.items.user[$.inArray(item.user, $scope.items.user)].id))

答案 1 :(得分:0)

$.inArray返回数组中元素的索引,请考虑:

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

所以你需要输出:

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

答案 2 :(得分:0)

您可以使用for...of循环,并在匹配后立即返回:

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

请注意,默认情况下,您不需要最终return作为函数返回undefined

使用.some()的另一种方式:

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

或者如果你有ES6箭头支持:

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