gpt4 book ai didi

javascript - 分配和修改数组之间的区别

转载 作者:行者123 更新时间:2023-11-30 09:13:24 26 4
gpt4 key购买 nike

我只是浪费了 2 天的时间来查找我在 angular2 项目代码中的错误所在,处理 service.ts 文件。我找到了!是的……不。我刚刚修好了。我在这里(在堆栈上)是为了了解工作代码和有问题的代码之间的区别,因为在我看来它们的行为是相同的。

这里是窃听器:

for (let i = 0; i < quantita; i++) {
this.a.p[inizio + i] = target;
}

这是工作:

this.a.p = this.a.p.map((giorno, index) => {
if (index >= inizio && index < inizio + quantita) {
return target;
} else {
return giorno;
}
});

this.a 是一个引用数组的变量。错误在于更改不仅会影响数组的选定对象,还会应用于另一个对象。我几乎调试了所有内容,this.a 是正确的实例,代码只被调用一次(应该如此)并且没有其他代码对对象进行此更改。

我想提供有关该问题的所有信息,如果没有请告诉我。

最佳答案

当您在变量中保存一个数组时,您保存了对该数组的引用。如果您更改数组中的值,所有引用都会“看到”更改:

let a = [1, 2, 3];
let b = a; // same array in a different variable
for(let i =0;i< a.length;i++) a[i] = a[i] *2;

console.log(a); // [2;3;6]
console.log(b); // [2;3;6]

如果您使用map,将创建​​一个包含映射操作结果的新数组:

let a = [1, 2, 3];
let b = a;
a = a.map(n => n * 2) // new array in a, b still has the same array

console.log(a); // [2;3;6]
console.log(b); // [1;2;3]

您可以构建一个 for 版本,如果您创建一个新数组并将其插入该数组,它不会更改原始数组(尽管我强烈建议坚持使用我提出的 map这只是为了完整性):

let a = [1, 2, 3];
let b = a; // same array in a different variable

let tmp = []
for(let i =0;i< a.length;i++) tmp.push(a[i] *2);
a = tmp;

console.log(a); // [2;3;6]
console.log(b); // [1;2;3]

关于javascript - 分配和修改数组之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56890140/

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