带有 IndexOf 的下划线拒绝函数从数组中删除所有对象
Underscore reject Function with IndexOf removes all objects from array
我正在编写一个小型 Angular 应用程序,它使用 Underscore 来查看数组中的每个对象,如果对象与关键字(用户输入)不匹配,则将其删除。
$scope.search = function() {
$scope.posts = _.reject($scope.posts, function(p) {
var i = 0;
if ($scope.keywords.indexOf(p.author) < 0 ) {
i++;
}
if ($scope.keywords.indexOf(p.id) < 0 ) {
i++;
}
if(i > 0) {
return true;
}
});
};
如你所见,我正在设置一个计数器,如果在索引中找到关键字,则将其添加到计数器中,然后在最后检查计数器 return true 或 false 以删除数组中的对象。 $scope.posts
是包含我的数据的对象数组,$scope.keywords
是用户输入。我想查找来自 $scope.posts.author
对象和 $scope.posts.id
对象的输入。
如果我删除其中一个 if
语句,该函数将按预期执行:所有与关键字不匹配的内容都会从数组中删除。但是,一旦我向函数添加另一个 if
语句(如我上面的示例所示),所有对象都会从数组中删除。
在我看来 filter
可能更适合这里:
$scope.posts = _.filter($scope.posts, function(p) {
return $scope.keywords.indexOf(p.author) > -1 || $scope.keywords.indexOf(p.id) > -1;
});
使用 _.where
以相反的方式进行过滤或拒绝会更容易
var newArray = _.where($scope.posts, {keyword : $scope.keyword});
好了,一行。
编辑:
如果您坚持这样做,这里有一种方法可以稍微清理一下。
$scope.posts = _.reject($scope.posts, function(p) {
var check = false;
if ($scope.keywords.indexOf(p.author) < 0 ) {
check = true;
}
if ($scope.keywords.indexOf(p.id) < 0 ) {
check = true;
}
if(i > 0) {
return check;
}
});
};
不需要使用那样的整数
由于您要拒绝行,因此您需要确保所有条件都为真。您的代码只是检查其中一个是否为真。
$scope.search = function() {
$scope.posts = _.reject($scope.posts, function(p) {
return (
($scope.keywords.indexOf(p.author) < 0 ) &&
($scope.keywords.indexOf(p.id) < 0 )
);
});
};
我正在编写一个小型 Angular 应用程序,它使用 Underscore 来查看数组中的每个对象,如果对象与关键字(用户输入)不匹配,则将其删除。
$scope.search = function() {
$scope.posts = _.reject($scope.posts, function(p) {
var i = 0;
if ($scope.keywords.indexOf(p.author) < 0 ) {
i++;
}
if ($scope.keywords.indexOf(p.id) < 0 ) {
i++;
}
if(i > 0) {
return true;
}
});
};
如你所见,我正在设置一个计数器,如果在索引中找到关键字,则将其添加到计数器中,然后在最后检查计数器 return true 或 false 以删除数组中的对象。 $scope.posts
是包含我的数据的对象数组,$scope.keywords
是用户输入。我想查找来自 $scope.posts.author
对象和 $scope.posts.id
对象的输入。
如果我删除其中一个 if
语句,该函数将按预期执行:所有与关键字不匹配的内容都会从数组中删除。但是,一旦我向函数添加另一个 if
语句(如我上面的示例所示),所有对象都会从数组中删除。
在我看来 filter
可能更适合这里:
$scope.posts = _.filter($scope.posts, function(p) {
return $scope.keywords.indexOf(p.author) > -1 || $scope.keywords.indexOf(p.id) > -1;
});
使用 _.where
以相反的方式进行过滤或拒绝会更容易var newArray = _.where($scope.posts, {keyword : $scope.keyword});
好了,一行。
编辑:
如果您坚持这样做,这里有一种方法可以稍微清理一下。
$scope.posts = _.reject($scope.posts, function(p) {
var check = false;
if ($scope.keywords.indexOf(p.author) < 0 ) {
check = true;
}
if ($scope.keywords.indexOf(p.id) < 0 ) {
check = true;
}
if(i > 0) {
return check;
}
});
};
不需要使用那样的整数
由于您要拒绝行,因此您需要确保所有条件都为真。您的代码只是检查其中一个是否为真。
$scope.search = function() {
$scope.posts = _.reject($scope.posts, function(p) {
return (
($scope.keywords.indexOf(p.author) < 0 ) &&
($scope.keywords.indexOf(p.id) < 0 )
);
});
};