我有一个这样的数组
var array = [1,2,3,4,5,6,7,8,9,10];
循环代码就是这样使用underscore.js_.each
中的函数
_.each(array,function(item,index){
console.log(item);
});
但是我想在循环时删除数组中的一些项目。例如,我需要从数组中删除数字 5 并且循环不打印数字 5。问题是,在此数组上循环时是否可以删除数组中的项目?
我有一个这样的数组
var array = [1,2,3,4,5,6,7,8,9,10];
循环代码就是这样使用underscore.js_.each
中的函数
_.each(array,function(item,index){
console.log(item);
});
但是我想在循环时删除数组中的一些项目。例如,我需要从数组中删除数字 5 并且循环不打印数字 5。问题是,在此数组上循环时是否可以删除数组中的项目?
在迭代数组时修改数组通常是一个非常糟糕的主意。最好的解决方案是将索引存储在一个单独的数组中,然后将它们删除(请记住从最后一个到第一个迭代该数组,这样您就不必处理更改索引)。
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);
}
}
使用下划线,您可以这样做:
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);
});
这是一个简单的内联解决方案,它使用下划线的拒绝功能对我有用:
_.each(_.reject(array, function(arrayItem) { return arrayItem === 5}), function(item){
console.log(item);
});
您可以使用 Undersocre 来减少代码行。下划线是一个方便的工具。
var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
array = _.without(array, _.findWhere(array, {
id: 3
}));
console.log(arr);