1

我有一个这样的数组

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

4

5 回答 5

4

在迭代数组时修改数组通常是一个非常糟糕的主意。最好的解决方案是将索引存储在一个单独的数组中,然后将它们删除(请记住从最后一个到第一个迭代该数组,这样您就不必处理更改索引)。

于 2013-10-12T11:11:30.177 回答
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);
    }
}
于 2013-10-12T11:17:09.243 回答
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);
});
于 2013-10-12T11:25:59.260 回答
1

这是一个简单的内联解决方案,它使用下划线的拒绝功能对我有用:

_.each(_.reject(array, function(arrayItem) { return arrayItem === 5}), function(item){
  console.log(item);
});
于 2017-09-22T23:41:31.440 回答
1

您可以使用 Undersocre 来减少代码行。下划线是一个方便的工具。

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
array = _.without(array, _.findWhere(array, {
  id: 3
}));
console.log(arr);

于 2017-01-18T04:43:03.823 回答