【问题标题】:Accessing nested arrays in Javascript functions在 Javascript 函数中访问嵌套数组
【发布时间】:2019-09-16 11:10:42
【问题描述】:

我有一个函数,它接受一个数组数组和两个输入值。该函数需要返回一个包含所有这些信息的数组;但是,一旦访问了第三级数组,它就会复制一个“未定义”的值,而不是那里的实际数组。

我也尝试过传入数组的副本而不是原始引用,但出现了同样的问题。

function relation(list, x, y){
    var x = [list, x, y];
    return x;
}

使用复制功能的尝试:

function copy(list){
    var newList = [];
    for (var i = 0; i < list.length; i++){
        if (Array.isArray(list[i])){
        newList[i] = list[i].slice();
    }
        else newList[i] = list[i];
    }
    return newList;
}

function relation(copy(list), x, y){
    var x = [list, x, y];
    return x;
}

不管使用哪个版本的relation(),调用函数

var x = [0, [0, [0, 1, 2] ] ];

var y = relation(x, 5, 10);
console.log(y); 

应该是

[ [ 0, [ 0, [0, 1, 2] ] ], 5, 10]

但实际上返回

[ [ 0, [ 0, [Array] ] ], 5, 10]

同样,当尝试访问最内层数组中的元素时:

console.log(y[0][0][0]);

函数返回未定义。

有没有一种简单的方法可以复制这个最里面的数组?

【问题讨论】:

    标签: javascript arrays jagged-arrays


    【解决方案1】:

    对于数组的浅拷贝,请使用扩展运算符:...

    let copy = [...array]
    

    顺便说一句,请注意如何分配变量:var x = [list, x,y];

    var nested = [0, [0, [0, 1, 2] ] ];
    
    function notMuchChanged(array, x, y){
      let outerArray = [];
      let copyArray = [...array];
      outerArray.push(copyArray);
      outerArray.push(x);
      outerArray.push(y);
      return outerArray;
    }
    
    console.log(JSON.stringify(notMuchChanged(nested, 5, 10)));

    【讨论】:

      【解决方案2】:

      只需使用console.log(JSON.stringify(y)),您就会发现一切都如您所愿。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 2010-10-29
        • 2021-12-10
        • 2021-05-27
        • 1970-01-01
        相关资源
        最近更新 更多