[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