我有一个像这样的数组
var array = [1,2,3,4,5,6,7,8,9,10];
中的_.each
函数循环代码就是这样
_.each(array,function(item,index){
console.log(item);
});
但是我希望在循环时删除数组中的一些项目。例如,我需要从数组中删除数字5,循环不打印数字5。 问题是,在这个数组上循环时是否可以删除数组中的项目?
答案 0 :(得分:4)
在迭代数组时修改数组通常是一个非常糟糕的主意。最好的解决方案是将索引存储在一个单独的数组中,然后将其删除(记得从最后一个到第一个迭代该数组,这样你就不必处理更改索引了。)
答案 1 :(得分:2)
2种方式,我推荐第一种方式。
var array = [1,2,3,4,5,6,7,8],
items_to_remove = [], i;
_.each(array, function(item,index){
if(item === 'something'){
items_to_remove.push(index);
}
});
while((i = items_to_remove.pop()) != null){
array.splice(i, 1);
}
// OR
for(i = array.length - 1; i > -1; --i) {
if(array[i] === 'something') {
array.splice(i, 1);
}
}
答案 2 :(得分:1)
使用下划线你可以这样做:
var array = [1,2,3,4,5,6,7,8,9,10];
var filteredList = _.filter(array, function(item){
// do something with each item - here just log the item
console.log(item);
// only want even numbers
return item % 2 == 0;
});
// show filtered list
_.each(filteredList, function(item){
console.log(item);
});
答案 3 :(得分:1)
您可以使用Undersocre来减少代码行。 Underscore是一个方便的工具。
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
array = _.without(array, _.findWhere(array, {
id: 3
}));
console.log(arr);

答案 4 :(得分:1)
这是一个简单的内联解决方案,使用下划线的拒绝功能对我有用:
_.each(_.reject(array, function(arrayItem) { return arrayItem === 5}), function(item){
console.log(item);
});