我在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变量中。
答案 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);