gpt4 book ai didi

javascript - 使用 for-of 更新数组对象

转载 作者:行者123 更新时间:2023-11-28 12:14:40 26 4
gpt4 key购买 nike

我有以下两个对象数组。我想做的是,如果 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));

为什么上述两种方法会得到两个不同的结果?提前致谢!

最佳答案

重新分配变量本身永远不会改变现有对象,或者至少在非常奇怪的情况之外不会改变。当你这样做时

itemX = itemY;

您只是将 itemX 变量指向的值更改为 itemY。最初的 itemX 以及 itemX 的来源对象不会改变。为了改变对象,您必须始终显式地为对象的属性分配一个新值,例如使用 obj.fooobj['foo' ],或者如您的代码中所示,x[j] = y[i];

关于javascript - 使用 for-of 更新数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52109995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com