javascript - 无法复制多维数组

标签 javascript arrays duplicate-data

这个简单的代码适用于一维数组但不适用于多维数组:

var a=[[0,0,0],[0,0,0],[0,0,0]];
var b=a.slice(0);

a[0][0]=2;

alert(b[0][0]);//Should display 0, but displays 2

http://jsfiddle.net/e2vFk/3

如何复制多维数组?

编辑:对于这个例子,维度是2,但我的真实数组的维度是4

最佳答案

这是一个适用于任何深度的通用解决方案,并假设您的数组实际上是数组,而不是类数组对象。

function clone(arr) {
    arr = arr.slice()
    for (var i = 0; i < arr.length; i++)
        if (Array.isArray(arr[i]))
            arr[i] = clone(arr[i])
    return arr
}

如果旧版浏览器需要,可以填充 Array.isArray 方法。

if (!Array.isArray) {
    Array.isArray = function(arr) {
        return Object.prototype.toString.call(arr) === "[object Array]"
    }
}

function clone(arr) {
    return arr.map(function(item) {
        if (Array.isArray(item))
            return clone(item)
        return item
    })
}

这是一个使用 .map() 的解决方案。

关于javascript - 无法复制多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003651/

相关文章:

java - 填充数组列表

r - 用于标记重复项的用户定义函数

ruby - 如何计算 Ruby 数组中的重复项

protocols - ARP源硬件地址是否冗余?

javascript - Angular JS 应用程序中的后退按钮行为

javascript - 如果我在两个模块中注册了两个同名的不同指令,最后注册的会赢吗?

c - 在 C 中反转数组

javascript - RSA 登录 node.js 并在 C++ 中验证

javascript - 如何让制表符空间在 CKEditor 中工作?

php - 为 foreach() 提供的参数无效;数组设置不正确