for 循环里if每次取出最新的scource[i]比较
forEach循环虽然改了原数组, 但是参数i没有变化
source.forEach((i,d)=>{
val.forEach((j,f)=>{
if(source[d]===val[f]){
source[d]=source[d]*2;
}
})
})
这样才会有一样的结果
他俩肯定不一样,不然为啥出两个,包括那么多的循环api,某些情况下有些问题他们都可以解决,但是本质上还是不同的。
比如你这里,forEach它里面的回调中的变量i和真正的数组元素,这是两个变量的问题,就像下面代码一样
var a = 1
var b = a
b = 3
此时更改b的值,不代表a就要更改
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.9k 阅读
2 回答2.2k 阅读
3 回答1.9k 阅读✓ 已解决
4 回答2k 阅读✓ 已解决
在
for
循环中:i = 1, j = 0
的时候,source[i] === val[0]
,满足条件,source[1] *= 2
,此时source[1]
= 4;i = 1, j = 1
,由于source[1]
变成 4 了,恰好又与val[1]
相等,于是source[1]
再次被乘以 2。这是一个挺有意思的
Bug
,如果你把val
里两个数的顺序调换一下就不会出问题了。解决此
Bug
,可以先把值取出来,避免在下一次内层循环中拿修改后的值再去作比较:还可以优化一下,在完成操作之后结束本次内层循环