Javascript JS数组问题-切片数组';b';和';a';它也是切片的

Javascript JS数组问题-切片数组';b';和';a';它也是切片的,javascript,Javascript,我有两个数组:A和B,当我更改其中一个时,两者都会更改。是否有一种方法可以编辑一个而不更改另一个 a = [[0,0,0,0,0],[0,0,0,0,0]] b = [[1,2,3,4,5],[6,7,8,9,10]] a = b.slice(0) a[0][0] = 10 console.log(a) /* [[10,2,3,4,5],[6,7,8,9,10]] */ console.log(b) /* [[10,2,3,4,5],[6,7,8,9,10]] */ a很好,但我需要b保

我有两个数组:A和B,当我更改其中一个时,两者都会更改。是否有一种方法可以编辑一个而不更改另一个

a = [[0,0,0,0,0],[0,0,0,0,0]] 
b = [[1,2,3,4,5],[6,7,8,9,10]]
a = b.slice(0)
a[0][0] = 10
console.log(a) /* [[10,2,3,4,5],[6,7,8,9,10]] */ 
console.log(b) /* [[10,2,3,4,5],[6,7,8,9,10]] */ 

a很好,但我需要b保持[[1,2,3,4,5],[6,7,8,9,10]

当您进行
拼接时,您更改
a
b
的引用,但是,数组b中的数组引用仍然共享引用,因此,请将代码更新为以下内容。使用

a=[[0,0,0,0,0],[0,0,0,0]]
b=[[1,2,3,4,5],[6,7,8,9,10]]
a=b.map(x=>[…x])
a[0][0]=10
console.log(a)/*[[10,2,3,4,5],[6,7,8,9,10]*/

console.log(b)/*[[1,2,3,4,5],[6,7,8,9,10]*/
您可以使用
映射到
切片
每个数组

a=[[0,0,0,0,0],[0,0,0,0]]
b=[[1,2,3,4,5],[6,7,8,9,10]]
a=b.map(o=>o.slice(0));
a[0][0]=10
控制台日志(a);

控制台日志(b)使用获取浅层副本,这意味着嵌套数组通过其对象引用获取

您可以使用with检查数组并递归地映射这些数组

const deep=a=>Array.isArray(a)?a、 地图(深):a;
变量a=[[0,0,0,0,0,0],[0,0,0,0,0]],
b=[[1,2,3,4,5],[6,7,8,9,10];
a=b.地图(深度);
a[0][0]=10;
控制台日志(a);
控制台日志(b)
.as控制台包装器{max height:100%!important;top:0;}
,类似于有一个浅范围,因此它可以工作:

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

a[0] = 10;
console.log(b); // [1, 2, 3]
console.log(a); // [10, 2, 3, 4]
但这不起作用:

var a = [[0,0,0,0,0],[0,0,0,0,0]]; //multidimensional!
var b = [[1,2,3,4,5],[6,7,8,9,10]];

a = b.slice(0);
a[0][0] = 10;
console.log(a); 
console.log(b);
然后,键是使用
slice()
for
或其他什么进行深入,下面是使用for的示例:

var a = []; 

for (var i = 0, len = b.length; i < len; i++) {
    a[i] = b[i].slice();
}

当您将b切片并将其分配给a时,a现在引用b。您需要确保它们不是彼此的引用。您可以使用
a=JSON.parse(JSON.stringify(b))
代替
a=b.slice(0)
slice()
contat()
用于浅层复制,即用于一维数组。
var a = [[0,0,0,0,0],[0,0,0,0,0]]; 
const b = [[1,2,3,4,5],[6,7,8,9,10]];// doesn't work

var a = b.slice(0);

a[0][0] = 10; // a changes b
console.log(a); 
console.log(b);