2016-11-09 13 views
0

並べ替える前と並べ替え後の配列の変更を追跡する必要があります。私は2つの変数originalOrderrulesetOrderを持っています。私のコンポーネントはrulesetOrderにバインドされているので、アイテムを移動すると、その配列がそのインデックスを配列に反映するように更新されます。私が再注文するたびに、イベントが発生し、originalOrderrulesetOrderを比較します。すべての比較の終わりに、私はoriginalOrderを更新された新しいrulesetOrderと等しく設定しました。配列の状態を追跡する

初めて注文したとき、それはいいです、originalOrderは新しいもの(rulesetOrder)とは異なります。 2回目の再注文を行った場合、originalOrderは自動的にrulesetOrderで変更されたように見えるため、2つの配列に違いはありません。

ここに私のコードがありますので、誰でも私が間違っていることを助けてください。originalOrderは、イベントが再び発生したときの配列の前の状態と常に同じですか?私はrulesetOrderに等しい元の順序を設定すると1が変化したときに、他の1が同様になるように、

OnReorder() 
{  
    console.log("Start: " + JSON.stringify(this.originalOrder)); 
    console.log("New Order:" + JSON.stringify(this.rulesetOrder));   
    this.originalOrder = this.rulesetOrder; 
} 

、それは、それらを一緒に結合していますか?これを回避する方法はありますか?

初回:

スタート:[ "ae74e7fd-a772-4fa2-b2cb-19c7c0bc611f"、 "1caf3416-9853-49eb-8bda-c3b9017a204a"、「9e5fe94d-6c0e-4b85-85f4-38a074badfeb "]

ニュー・オーダー:[" 1caf3416-9853-49eb-8bda-c3b9017a204a」、 "ae74e7fd-a772-4fa2-b2cb-19c7c0bc611f"、 "9e5fe94d-6c0e-4b85-85f4-38a074badfeb"]

2回目:

スタート:[ "ae74e7fd-a772-4fa2-b2cb-19c7c0bc611f"、 "1caf3416-9853-49eb-8bda-c3b9017a204a"、 "9e5fe94d-6c0e-4b85-85f4-38a074badfeb"]

ニューオーダー:[ "ae74e7fd-a772-4fa2-b2cb-19c7c0bc611f"、 "1caf3416-9853-49eb-8bda-c3b9017a204a"、 "9e5fe94d-6c0e-4b85-85f4-38a074badfeb"]

+0

'this.originalOrder = this.rulesetOrder;を設定すると、' originalOrder'は 'rulesetOrder'とまったく同じ配列を指しています。 'rulesetOrder'のコピーを作成し、' originalOrder'をそれに設定してください。 –

+0

ハ...そういうふうに感じる。 Javascriptは配列を参照渡しするので、typescriptはjavascriptにトランケートされているので、その後も行います。 – Bohms27

答えて

0

配列は参照によって渡され、従ってそれはです上記のMikeが指摘しているように、どのように動作するかは、配列のコピーをoriginalOrder配列に設定する必要があります。