Javascript:如何在不更改引用的情况下修改数组中的每个元素

Javascript:如何在不更改引用的情况下修改数组中的每个元素,javascript,Javascript,基本上,我想将insideArr的元素更改为等于targetar,它还应该更改nestedArr的第一个元素(因为insideArr指的是它) 以上两种方法都不起作用,因为它会使insideArr指向新的引用。 我知道使用forEach在insideArr中循环并逐个分配应该是可行的,但是有更好的方法吗?顺便说一句,我应该避免这种用法吗?如果您必须维护insideArr作为对nestedArr[0]的引用,您可以使用来变异insideArr 让nestedArr=[[0,0],[0,0]] 让

基本上,我想将
insideArr的
元素更改为等于
targetar
,它还应该更改
nestedArr
的第一个元素(因为
insideArr
指的是它)

以上两种方法都不起作用,因为它会使
insideArr
指向新的引用。
我知道使用
forEach
insideArr
中循环并逐个分配应该是可行的,但是有更好的方法吗?顺便说一句,我应该避免这种用法吗?

如果您必须维护
insideArr
作为对
nestedArr[0]
的引用,您可以使用来变异
insideArr

让nestedArr=[[0,0],[0,0]]
让insideArr=nestedArr[0]
设targetar=[1,1]
//用TARGETAR更换所有内耳环
内耳环拼接(0,内耳环长度,…目标)
log(“仍然是相同的引用吗?”,insideArr===nestedArr[0])
控制台日志(“insideArr:,insideArr”)
console.log(“nestedArr:,nestedArr)

.as console wrapper{max height:100%!important;}
如果必须维护
insideArr
作为对
nestedArr[0]
的引用,可以使用来修改
insideArr

让nestedArr=[[0,0],[0,0]]
让insideArr=nestedArr[0]
设targetar=[1,1]
//用TARGETAR更换所有内耳环
内耳环拼接(0,内耳环长度,…目标)
log(“仍然是相同的引用吗?”,insideArr===nestedArr[0])
控制台日志(“insideArr:,insideArr”)
console.log(“nestedArr:,nestedArr)

.as console wrapper{max height:100%!important;}
假设您有充分的理由保持引用不变-有时,您可以执行以下操作:

insideArr = targetArr
insideArr = [..targetArr]

假设您有充分的理由保持引用不变——有时也有,您可以:

insideArr = targetArr
insideArr = [..targetArr]


避免这种用法是为了什么?为什么不
nestedArr[0]=targetar
?为什么你需要保持
insideArr
作为对
nestedArr[0]
的引用?我得说,接近票数的人过于热情了。这是一个完全正确的问题。相关:,@ksav这就是我要问的,我不知道这种编辑是否会降低代码的健壮性。
避免这种用法是为了什么?为什么不
nestedArr[0]=targetar
?为什么你需要保持
insideArr
作为对
nestedArr[0]
的引用?我得说,接近票数的人过于热情了。这是一个非常有效的问题。相关:,@ksav这就是我要问的,我不知道这种编辑是否会使代码变得不那么健壮。我更喜欢Phil使用splice的一行回答,但保留在这里是为了说明剥猫皮的方法不止一种。喜欢老的
.length=0
技巧。你也可以使用
push
而不是
unshift
(因为这是一种更为普遍理解的方法)@Phil老实说,我的第一个猜测是
unshift
将它们添加到了错误的位置order@Bergi一样。我不得不检查文档~很好,我们不太出名,老实说,我不知道为什么我选择它而不是推!在代码中添加了注释。我更喜欢Phil使用splice的一行回答,但将其保留在这里是为了表明有不止一种剥猫皮的方法。喜欢老的
.length=0
技巧。你也可以使用
push
而不是
unshift
(因为这是一种更为普遍理解的方法)@Phil老实说,我的第一个猜测是
unshift
将它们添加到了错误的位置order@Bergi一样。我不得不检查文档~很好,我们不太出名,老实说,我不知道为什么我选择它而不是推!在代码中添加了注释。
let nestedArr = [
  [0, 0],
  [0, 0]
];
let insideArr = nestedArr[0];
let targetArr = [1, 1];
insideArr.length = 0;
insideArr.unshift(...targetArr); // insideArr.push(...targetArr) works fine too
console.log(nestedArr);