从underscorejs中的循环数组中删除项目

时间:2013-10-12 11:09:40

标签: javascript arrays underscore.js

我有一个像这样的数组

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。 问题是,在这个数组上循环时是否可以删除数组中的项目?

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);
});