Sen*_*nal 0 javascript arrays for-loop
我有以下两个对象数组.我要做的是如果id属性匹配,用数组x项替换数组y项.
我可以从一个普通的for循环中轻松实现这一点.但我不明白为什么我的for-of循环返回不同的结果.
let x1 = [{
id: '1',
a: 1,
b: 2
}];
let y1 = [{
id: '1',
c: 3,
b: 2
}];
let x2 = [{
id: '1',
a: 1,
b: 2
}];
let y2 = [{
id: '1',
c: 3,
b: 2
}];
let updateX1 = (x, y) => {
for (let itemY of y) {
for (let itemX of x) {
if (itemY.id === itemX.id) {
itemX = itemY;
}
}
}
return x;
}
let updateX2 = (x, y) => {
for (let i = 0; i < y.length; i++) {
for (let j = 0; j < x.length; j++) {
if (y[i].id === x[j].id) {
x[j] = y[i];
}
}
}
return x;
}
console.log(updateX1(x1, y1));
console.log(updateX2(x2, y2));Run Code Online (Sandbox Code Playgroud)
为什么我对上述两种方法得到两种不同的结果?提前致谢!
重新分配变量本身永远不会改变现有对象,或者至少不在非常奇怪的情况之外.当你这样做
itemX = itemY;
Run Code Online (Sandbox Code Playgroud)
你只是改变itemX变量指向的值itemY.原来的东西itemX和来自的对象itemX不会改变.为了变异的对象,你总是必须明确一个新值分配给属性的对象,如与obj.foo,obj['foo']或,在你的代码,x[j] = y[i];.