Показать сообщение отдельно
  #49 (permalink)  
Старый 09.12.2013, 03:13
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

var oldArray = [1, 2, 3, 4, 5];
var newArray = [11, 3, 4, 3, 11, 21];

var changes = compare(oldArray, newArray);
console.log(changes);


// превратим старый аррей в новый используя полученные данные

// удаляем (в обратном порядке чтобы индексы не смещались)
for (var i = changes.remove.length - 1; i >= 0; i--) {
  var index = changes.remove[i];
  oldArray.splice(index, 1);
}
// добавляем
for (var i = 0; i < changes.insert.length; i++) {
  var index = changes.insert[i];
  oldArray.splice(index, 0, newArray[index])
}
// изменяем
for (var i = 0; i < changes.replace.length; i++) {
  var index = changes.replace[i];
  oldArray[index] = newArray[index];
}

// отобразим результат, старый и новый массивы теперь равны
console.log(newArray);
console.log(oldArray);



// наща мега функция
function compare(oArr, arr) {
  var search = arr.slice();
  var changes = {
    insert : [],
    remove : [],
    replace: []
  }

  for (var i = 0, index; i < oArr.length; i++) {
    index = search.indexOf(oArr[i], i);
    if (index < 0) changes.remove.push(i);
    else delete search[index];
  }

  for (var i = 0; i < search.length; i++) if (i in search) {
    var index = changes.remove.indexOf(i);
    if (index < 0) changes.insert.push(i);
    else {
      changes.remove.splice(index, 1);
      changes.replace.push(i)
    }
  }
  
  return changes
}

Последний раз редактировалось Maxmaxmaximus4, 09.12.2013 в 03:18.
Ответить с цитированием