这是我的代码 -
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。我在这里失踪的最愚蠢的事是什么?
答案 0 :(得分:2)
在迭代时,您正在更改a
,从而导致出现差异
您应该考虑克隆a
(使用a.slice()
创建),然后更改a
和b
,如果找到匹配项。
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'
。