繁体   English   中英

多维数组行为异常

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM