gpt4 book ai didi

javascript - Slice() 不适用于二维数组

转载 作者:行者123 更新时间:2023-11-30 16:19:22 26 4
gpt4 key购买 nike

我正在尝试使用 slice() 按值复制二维数组,因此当我更改新数组时,它不会影响原始数组。但是,它似乎适用于一维数组而不是二维数组。

这是我的代码:

var arrayA = new Array(5); // Make 2d array
for (var i = 0; i < 5; i++) {
arrayA[i] = new Array(5);
}
for (var x = 0; x < 5; x++) { // Populate original array
for (var i = 0; i < 5; i++) {
arrayA[x][i] = x + i;
}
}
arrayB = arrayA.slice(); // make new array 1
arrayB[0][0] = 10;
var arrayC = arrayA.slice(); // make new array 2 (wanted to see it changed when I use var)
arrayC[0][0] = 100; // Changing value of 1st element of last array


$(document).click(function() {
alert(arrayA[0][0]); // Prints 100
alert(arrayB[0][0]); // Prints 100
alert(arrayC[0][0]); // Prints 100
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

谁能告诉我为什么 slice 不能处理多维数组,是否有办法解决这个问题?谢谢。

最佳答案

因为arrayA[0]是指向数组的链接,而不是数组本身,所以

arrayB[0][0] = 10;arrayC[0][0] = 100; 更改相同的数组,如果你需要克隆内部数组需要更改它的独立字段:

var a = [[0,1,2,3],[0,1,2,3]]
var b = a.slice();
var c = a.slice();
b[0]=b[0].slice();
c[0]=c[0].slice();
b[0][0] = 10
c[0][0] = 100

console.log(a[0][0], b[0][0], c[0][0]);

通常如果你需要深度克隆,最好使用JSON.parse(JSON.stringify(a));

关于javascript - Slice() 不适用于二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34972620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com