如果通过引用传递数组,以下如何工作?

问题描述 投票:3回答:3
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来引用它而不是相反

javascript arrays
3个回答
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);

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)

1
投票

引用意味着如果两个变量引用相同的对象/数组,则修改一个变量(更改属性/删除属性)也将更改另一个变量。

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]
© www.soinside.com 2019 - 2024. All rights reserved.