我有一个对象数组: -
$scope.obj=[{"id":1,"content_type_name":"collections"},{"id":2,"content_type_name":"collections"},{"id":3,"content_type_name":"random"}];
现在,当我尝试运行angularForEach循环时,只有第一个集合条目(即id = 1的一个被删除,但id = 2的那个条目仍然存在)。理想情况下,预期输出应该只是id = 3的对象。以下是代码: -
angular.forEach($scope.obj, function(content, index){
if(content.content_type_name == "collections"){
$scope.obj.splice(index,1);
}
});
然而,当我运行它时,它完全正常: -
for(var i=$scope.obj.length-1;i>=0;--i){
if($scope.obj[i].content_type_name == "collections"){
$scope.obj.splice(i,1);
}
}
我没有清楚地了解为什么拼接不起作用。
请帮忙吗?
答案 0 :(得分:1)
因此,角度forEach循环从数组的开头开始,而带有for循环的第二个示例在结束时开始并返回。由于您在找到“collections”作为content_type_name时删除了一个元素,因此会将数组中每个其他项的索引向下移1。
在Angular forEach循环中,它从索引0开始,将其删除,然后转到索引1,这是数组中的最后一个元素,因为刚删除了一个。基本上它正在跳过第二个元素。
你的第二个例子,使用for循环,没有这个问题,因为它向后移动通过数组。因此,它检查索引2,不执行任何操作,检查索引1,将其删除,然后转到索引0,它也会删除。希望我说得这么好......
答案 1 :(得分:0)
也许您正在寻找过滤器
$scope.obj = $scope.obj.filter(function(e){
return e.content_type_name == "collections"
});
然后你不必删除每一个元素