下面两个数组中,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在外部,第一次i为0的时候,j就从0走到了lenJ,i为1之后就不再会命中
j < lenJ
下面的写法变量j在根据i的增加一直重新定义,每次都是从0到了lenJ