删除前一个元素时,forEach会跳过元素

Maj*_*our 5 javascript performance

我有两个数组,available_itemsrequested_items.我想删除requested_items中缺少的元素available_items.使用forEach显然不会给出预期结果,因为即使删除了一个元素并且下一个元素具有旧索引,内部索引也会递增.

这是一个测试用例(也在这个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());
Run Code Online (Sandbox Code Playgroud)

结果是:

"will keep 0 5"
"will remove 1 12"
"will remove 2 30"
"will remove 3 17"
"Resulting request array is 5,49,90"
Run Code Online (Sandbox Code Playgroud)

这将重复数万次,因此,如果它们对性能产生负面影响,使用库(例如下划线)是我想要避免的.

所以,我的问题是,解决这个问题的最便宜的方法是什么?

Jo *_*vid 9

使用for循环并向后计数,因此您没有索引问题.

for(var i = requested_items.length - 1; i > 0; i--) {
   // your logic
}
Run Code Online (Sandbox Code Playgroud)

它"感觉"是hacky但它确实可以解决问题.