我有两个数组,available_items
和requested_items
。我想从中删除requested_items
中缺少的元素。使用forEach
并没有给出预期的结果,因为即使删除一个元素并且下一个元素具有旧索引,内部索引也会增加。for each删除一个元素时跳过一个元素
这是一个测试案例(也this jsbin):
var available_items = [2, 5, 9, 36, 48, 23];
var requested_items = [5, 12, 49, 30, 90, 17];
requested_items.forEach(function(v, i, a) {
if(available_items.indexOf(v) == -1) {
console.log("will remove " + i + ' ' + v);
a.splice(i, 1);
} else console.log("will keep " + i + ' ' + v);
});
console.log('Resulting request array is ' + requested_items.toString());
结果是:
"will keep 0 5"
"will remove 1 12"
"will remove 2 30"
"will remove 3 17"
"Resulting request array is 5,49,90"
这将重复数万次,因此,使用库(例如,下划线),是我想避免的,如果它们对性能产生不利影响的话。
所以,我的问题是,什么是最便宜的方法来纠正?
为什么不使用'for(var i in blah)'?如果我记得,这保证了在循环之前存在的每个元素至少被访问一次。 – Dave
做一个循环开始在结束和反向工作。 – RobH
那么结果数组应该是什么? – elclanrs