[JavaScript]天天用的for循环竟然不好使了!原因是……
我是不是相亲相爱一家人朋友圈看多了,竟然起了个这样的标题……咳咳,言归正传
其实这种情况只存在嵌套循环中。
下面两个数组中,obj1
某一项的id
等于obj2
某一项的xid
,想要通过循环把obj2
每一项的value
赋给obj1
中与之对应的项:
const obj1 = [
{ id: 1, ... },
...
];
const obj2 = [
{ xid: 1, value: 1, ...},
...
]
不知道为什么,下面这种写法,外层循环只能循环到i = 3
就不往下执行了:
let i = 0, j = 0, lenI = obj1.length, lenJ = obj2.length;
for (; i < lenI; i++) {
for (; j < lenJ; j++) {
if (obj1[i]['id'] === obj2[j]['xid']) {
obj1[i]['value'] = obj2[j]['value'];
break;
}
}
}
下面这样写就没问题:
for (let i = 0, len_i = obj1.length; i < len_i; i++) {
for (let j = 0, len_j = obj2.length; j < len_j; j++) {
if (obj1[i]['id'] === obj2[j]['xid']) {
obj1[i]['value'] = obj2[j]['value'];
break;
}
}
}
为啥呢?原因很简单,当内层循环执行的时候,j
的值已经改变了,前几次循环因为触发了break
,j
的值还小于lenJ
,所以还能继续执行,直到j == lenJ
,内层循环就不会再执行了。
这个错误好愚蠢……
END