![](/img/trans.png)
[英]Inconsistent behavior when sorting multi-dimensional arrays in javascript
[英]Unexpected Of Multi-Dimensional Arrays Behavior
我在嵌套数组中遇到了这个问题; 如果我更改一个数组元素的值,则另一个数组也会更改。 我不确定这是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();
感谢您的帮助!
如果希望它们是独立的数组,则可以将副本推入对象。 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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.