【问题标题】:Multi-dimension Array reference pro­blem多维数组引用问题
【发布时间】:2013-07-19 03:50:33
【问题描述】:

所以目前我这里有一个数组,我想对最后一项进行一些修改并将其推回。这里我有这个代码:(示例被简化)

var array = [
                 [ [0,1,2], [3,4,5] ]
            ];

//other stuff...

var add = array[0].slice(); //to clone the array (but not working as expected)
add[0][0] = 10;
array.push(add);

console.log(array);

结果如下

        

如您所见,第一项和第二项都将其第一项更改为10。我怎么解决这个问题?我已经克隆了数组。

【问题讨论】:

  • 没有参数的切片应该做什么
  • @aaronman - 这是用于克隆数组的技巧。
  • 是的,你明白了,问题是里面的对象是引用而不是新对象

标签: javascript arrays reference


【解决方案1】:

Array.prototype.slice() 进行浅拷贝,因此不会复制嵌套数组。你应该使用像this这样的深度克隆方法。

【讨论】:

  • 你的回答很好,但如果你说 slice 创建的数组是新的,但原始数组中的对象没有被复制而是引用,那就太好了
  • @aaronman 同意。我认为“浅拷贝”说明了一切,不是吗?
【解决方案2】:

Array.prototype.slice() 不会克隆嵌套数组。你可以针对你的问题做这样的事情

var array = [
                 [ [0,1,2], [3,4,5] ]
            ];

//other stuff...

var add = array[0].slice(); //to clone the array (but not working as expected)
add[0] = array[0][0].slice();
add[0][0] = 10;
array.push(add);

console.log(array);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2016-07-22
    • 2011-04-24
    • 2018-01-05
    • 2010-11-18
    • 1970-01-01
    • 2014-01-13
    相关资源
    最近更新 更多