我需要使用两个带有angularjs的javascript数组。 我想将一些元素从Ar1推送到Ar2,之后如果我在Ar2中更改这些元素的值,我希望自动更改Ar1中的值。
答案 0 :(得分:0)
你做不到。一个数组中的值与另一个数组中的相同值之间没有链接。 E.g:
var a1 = [42];
var a2 = [];
a2.push(a1[0]);
...在内存中给我们这个结构:
+---------+ a1---->| (array) | +---------+ | 0: 42 | +---------+ +---------+ a2---->| (array) | +---------+ | 0: 42 | +---------+
a1
中的42与a2
中的42之间没有链接。
一种替代方法是两个数组都有对象的引用,并使用这些对象的属性而不是数组中包含的条目。由于两个数组都引用相同的对象,因此通过另一个数组中的引用可以访问一个数组中引用的更改。
E.g:
var a1 = [{foo:"bar"}];
var a2 = [];
a2.push(a1[0]);
console.log(a1[0].foo); // "bar"
a2[0].foo = "updated";
console.log(a1[0].foo); // "updated"
这是有效的,因为这段代码:
var a1 = [{foo:"bar"}];
var a2 = [];
a2.push(a1[0]);
在内存中设置此结构:
+------------+ a1---->| (array) | +------------+ | 0: ref5542 |----+ +------------+ | | +------------+ +------------+ +---->| (object) | a2---->| (array) | | +------------+ +------------+ | | foo: "bar" | | 0: ref5542 |----+ +------------+ +------------+
两个数组都引用了相同的对象,因此无论您如何查找对象,都会显示更改该对象的状态。
答案 1 :(得分:-1)
如果在数组中推送引用类型变量,则每个地方都将使用相同的引用。
var a1 = [{a:10,b:20}];
var a2 = [];
a2.push(a1[0]);
console.log(a1,a2) //outputs {a:10,b:20}, {a:10,b:20}
a2[0].a = 30;
console.log(a1,a2) //outputs {a:30,b:20}, {a:30,b:20}
如果变量值是基本类型,则同样的事情将不起作用。例如,数字,字符串,布尔等。