我在使用嵌套数组时遇到了这个问题;如果我更改一个数组元素的值,则另一个数组也会更改。我不确定这是Bug还是JS中预期的问题。
如果运行此代码,您将获得两个控制台日志,其中两个数组的第一个元素为“ Changed Value”。我希望在第一个数组中看到“新值”,在valuesContainer_2数组中看到“更改后的值”。
function validationProcess() {
let valuesContainer_1 = [];
let valuesContainer_2 = [];
let data = [
["Option 1"],
["Option 2"],
]
for (let i = 0; i < data.length; i++) {
valuesContainer_1.push(data[i]);
valuesContainer_2.push(data[i]);
}
valuesContainer_1[0][0] = "New Value";
console.log(valuesContainer_1);
valuesContainer_2[0][0] = "Changed Value";
console.log(valuesContainer_2);
}
validationProcess();
谢谢您的帮助!
答案 0 :(得分:0)
如果希望它们成为独立的数组,则可以将副本推入对象中。 slice()
是执行此操作的一种方法。但是请注意,这是一个浅表副本,如果这些数组包含其他数组,则这些数组仍将只是对原始数组的引用。
function validationProcess() {
let valuesContainer_1 = [];
let valuesContainer_2 = [];
let data = [
["Option 1"],
["Option 2"],
]
for (let i = 0; i < data.length; i++) {
valuesContainer_1.push(data[i].slice()); //<-- add a copy
valuesContainer_2.push(data[i].slice()); //<-- add a copy
}
valuesContainer_1[0][0] = "New Value";
valuesContainer_2[0][0] = "Changed Value";
console.log(valuesContainer_1);
console.log(valuesContainer_2)
}
validationProcess();