var myarray = []
var array1 = [1,2,3]
myarray.push(array1)
array1 =[2,3,4]
myarray.push(array1)
console.log(myarray)
我知道
[[1,2,3],[2,3,4]]。
应该不是
[[2,3,4],[2,3,4]]
如果我通过引用?
谢谢
编辑:我猜想是因为= [2,3,4]创建了一个新对象,并分配了array1
来引用它,反之亦然
答案 0 :(得分:6)
您没有在修改变量(数组),而是在重新分配新值。
var myarray = [];
var array1 = [1, 2, 3];
myarray.push(array1);
array1.push(2, 3, 4); // Modifying the array in memory.
//myarray.push(array1);
console.log(myarray);
答案 1 :(得分:2)
您需要对array1
的元素进行变异以保留引用。不要重新分配它。
var myArray = []
var array1 = [1,2,3]
myArray.push(array1)
array1.forEach((e, i) => array1[i] = array1[i] + 1)
myArray.push(array1)
console.log(myArray)
答案 2 :(得分:1)
Reference表示如果两个变量引用相同的对象/数组,则修改其中的一个(更改属性/删除属性)也会更改另一个变量。
let array1 = [1,2,3];
let array2 = array1; //creating a reference
array1[0] = "something"; //modifying
console.log(array1)
console.log(array2)
引用并不意味着如果两个变量都引用相同的对象/数组,则为其中的一个赋一个新值以更改另一个。
let array1 = [1,2,3];
let array2 = array1; //creating a reference
array1 = ["something",2,3]; //Assigning a new value
console.log(array1)
console.log(array2)
如果要更改引用,请先更改myarray
的第一个元素,然后将其推入myarray
var myarray = []
var array1 = [1,2,3]
myarray.push(array1)
myarray[0] =[2,3,4]
myarray.push(myarray[0])
console.log(myarray[0]) //[2,3,4]
console.log(myarray[1]) //[2,3,4]
myarray[0][1] = "something else" //change both elements
console.log(myarray[0]) //[2,"something else",4]
console.log(myarray[1]) //[2,"something else",4]