我正在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放在一个数组中。但这似乎不是一个很好的方法来做到这一点
答案 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;
}