ForEach循环不打印数组的4个元素--JavaScript

时间:2018-06-13 17:07:36

标签: javascript

这是我的代码 -

var a = 'abcde'.split('');
var b = 'cxefgh'.split('');
//abfgh

a.forEach((e, index) => {
  console.log(e, index)
  if (b.indexOf(e) > -1) {
    b.splice(b.indexOf(e), 1);
    a.splice(index, 1);
  }
})

//Here the output -

//a 0
//b 1
//c 2
//e 3

为什么此循环不打印d。我在这里失踪的最愚蠢的事是什么?

2 个答案:

答案 0 :(得分:2)

在迭代时,您正在更改a,从而导致出现差异 您应该考虑克隆a(使用a.slice()创建),然后更改ab,如果找到匹配项。

var a = 'abcde'.split('');
var b = 'cxefgh'.split('');
//abfgh

a.slice().forEach((e , index)=> {
    console.log(e, index)
    if(b.indexOf(e) > -1) {
    b.splice(b.indexOf(e) , 1); // Find where it is in `b` and remove it.
    a.splice(a.indexOf(e) , 1); // Find where it is in `a` and remove it.
  }
})

console.log(a); // ['a', 'b', 'd']
console.log(b); // ['x', 'f', 'g', 'h']

答案 1 :(得分:2)

a.splice(index , 1);e时执行

'c'。此时index为2,因此a变为['a', 'b', 'd', 'e'](拼接会移除'c')。然后,forEach继续index 3,即(现在)'e'