2016-11-09 5 views
0

Мне нужно отслеживать изменения между массивом до его переупорядочения и после его переупорядочения. У меня есть две переменные originalOrder и rulesetOrder. Мой компонент привязан к rulesetOrder, так что когда я перемещаю элемент, он обновляет этот массив, чтобы отразить его индекс в массиве. Каждый раз, когда я переупорядочиваю, происходит событие, и я сравниваю originalOrder с rulesetOrder. В конце всех сравнений я установил originalOrder, равный новому обновленному rulesetOrder.Состояние отслеживания состояния массива

Первый раз, когда я перестраиваю, это нормально, originalOrder отличается от нового (rulesetOrder). Если я перехожу во второй раз, то originalOrder, кажется, автоматически изменился с rulesetOrder, поэтому не показывает различий между этими двумя массивами.

Вот мой код, может ли кто-нибудь помочь мне с тем, что я делаю неправильно, так что originalOrder всегда равен предыдущему состоянию массива, когда событие снова запущено?

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

Когда я установил первоначальный порядок, равный rulesetOrder, делает это связать их вместе, так что, когда один изменяет другой будет, а? Есть ли способ обойти это?

Первый раз:

Начало: [ "ae74e7fd-a772-4fa2-b2cb-19c7c0bc611f", "1caf3416-9853-49eb-8bda-c3b9017a204a", «9e5fe94d-6c0e-4b85-85f4-38a074badfeb "]

New Order: [" 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"]

New Order: [ "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 передает массивы по ссылке, поэтому машинопись затем делает это, так как она переводится в javascript ... – Bohms27

ответ

0

Массивы передаются по ссылке, поэтому это как это будет работать, как указал Майк выше, копия массива должна быть установлена ​​в массив originalOrder.

Смежные вопросы