如何确保链接两个单独的javascript对象的属性

时间:2016-09-09 07:06:27

标签: javascript angularjs arrays pass-by-reference

我在anuglar服务中有2个对象,我想指定一个名为nodes的属性,指向同一个数组。这是正确的方法吗?我没有看到当我对1个对象上的节点进行更改时,另一个正在更改

objectOne.nodes = [o1, o2, o3];
objectTwo.nodes = [];
angular.forEach(objectOne.nodes, function(n){
    objectTwo.nodes.push(n); // based on some logic not all n assigned to the objectTwo, some might go to objectThree.
})

现在,如果我对objectTwo.nodes[i]进行了更改,我希望这适用于objectOne.nodes[j],其中i和j是2个不同对象中同一节点的索引(因为排序可能不匹配) ,但我没有看到这一点。当我将节点推入objectTwo时,我做错了什么?

PS:我正在对DOM上的objectTwo节点进行更改,而objectOne和ObjectTwo都在我服务上的mem变量中。

2 个答案:

答案 0 :(得分:0)

如果推送对象的相同引用,新数组也应该影响源。



var objectOne = {}, objectTwo = {}, objectThree = {};

objectOne.nodes = [{ id: 1, name: 'o1' }, { id: 2, name: 'o2' }, { id: 3, name: 'o3' }];
objectTwo.nodes = [];
objectThree.nodes = [];

objectOne.nodes.forEach(function (o) {
    o.id % 2 ? objectTwo.nodes.push(o) : objectThree.nodes.push(o);
});

objectTwo.nodes[1].name += '+';

console.log(objectOne);
console.log(objectTwo);
console.log(objectThree);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:0)

一点帮助:



var div = document.createElement("div");
var a = {}, b = {};
a.nodes = b.nodes = [];
a.nodes.push(div);
div.style.color = "blue";
console.log(a.nodes[0].style.color);
console.log(b.nodes[0].style.color);
div.style.color = "red";
console.log(a.nodes[0].style.color);
console.log(b.nodes[0].style.color);