2016-09-09 6 views
0

同じ配列を指すnodesというプロパティを割り当てるAnuglarサービス内に2つのオブジェクトがあります。これは正しい方法ですか?私は1つのオブジェクトのノードへの変更が他の2つの別々のJavaScriptオブジェクトのプロパティを確実にリンクする方法

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]に変更を加える場合は今、私はこれはi、jは、インデックスされているobjectOne.nodes[j]の申請を期待していることを見ていないです2つの異なるオブジェクトの同じノードに対して(順序が一致しない可能性があるため)、これは表示されません。ノードをobjectTwoにプッシュすると何か問題が起きますか?

PS:私はDOMのobjectTwoノードに変更を加えています。また、objectOneとObjectTwoの両方が私のサービスのmem変数にあります。

+0

は、なぜあなたはただ行うことはありません - objectTwo.nodes = objectOne.nodes、そのようにあなたがそれを渡します参照してください – naortor

+0

いいえ、私はどのノードがobjectTwo、またはobjectThreeまたはo bjectFourなど... – rex

+0

1つのオブジェクト上のノードに変更を加え、もう一方は変更しています - あなたは '$ scope。$ watch'を参照していると思いますか?コールバック関数は 'angular.forEach'と似ています – CozyAzure

答えて

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; }

+0

Nanka THanksこれは私が期待するものですが、残念ながらそれを見ていません。あなたはangular.forEach()か、おそらくライブラリのim(handsontable)を使ってノードをDOMに束縛していると思いますか? – rex

+0

私は、dom要素は普通のオブジェクトのように振る舞いません。この場合、私はIDのような参照を収集する - と変更のために、私は参照を使用し、参照が指しているいくつかのDOMの変更を行います。 –

+0

DOMへの変更は確実にobjectTwoを更新しますが、これらはobjectOneに '伝播'されません – rex

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);

+0

私の場合は、異なるオブジェクト間でノード要素を分割する必要があるため、この解決法は適用されません。 – rex

+0

@ armensg90私は理解していません: - | – leaf

+0

多分私は間違っています。あなたの解決策を使用することはできますか?nodeOnlyにすでに定義されている配列ですか? – rex

関連する問題