09.12.2013, 01:04
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
cyber, чувак, сделай фикс уже search.indexOf(this[i], i);
|
|
09.12.2013, 01:08
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Maxmaxmaximus4
|
cyber, чувак, сделай фикс уже search.indexOf(this[i], i);
|
Эм, понял о чем ты, я не увидел)
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
09.12.2013, 01:20
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Maxmaxmaximus4, ну тогда в общем replace не нужен
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
09.12.2013, 01:36
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
Сообщение от cyber
|
ну тогда в общем replace не нужен
|
МНЕ - нужен, ну то есть собрать из старого массива новый используя только ремувы и инсерты я уже могу, реплейс это оптимизация, щас сижу добавляю его (реплейс это просто индексы значение которых надо поменять)
как ты вообще этот алгоритм придумал????????????????????????? сколько времени заняло? делал ли что-то подобное до этого? не ну, то есть , алгоритм то конечно тупой и брутальный, но РАБОТАЕТ ЖЕ)
Последний раз редактировалось Maxmaxmaximus4, 09.12.2013 в 01:44.
|
|
09.12.2013, 01:40
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Maxmaxmaximus4, когда курсовую писал, нужно было сравнить 2 массива с изображениями что бы не перезагружать все, а разбираться с готовыми алгоритмами было влом поэтому сделал "в лоб".
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
09.12.2013, 01:45
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
cyber, не ну, то есть , алгоритм то конечно тупой и брутальный, но РАБОТАЕТ ЖЕ) спасибо огромное
|
|
09.12.2013, 02:41
|
Профессор
|
|
Регистрация: 14.03.2012
Сообщений: 1,808
|
|
Ихих ребят вы чо, сравнение массивов по 2000 элементов из за парочки изменений это тоже не круто.
Цитата:
|
Конечно кто-то из вас скажет - просто сделай обертки на методы массива такие как pop push unshift и.т.п. и смотри как они вызываются и запоминай это, но я считчаю это костылем при чем грубым.
|
Можно же не переопределять свойства Array.prototype, а сделать другой обьект, который будет перекрывать эти свойства для твоих sсope обьектов. Вреда вообще никакого, и считаться будет быстрее)
__________________
Научу себя плохому
|
|
09.12.2013, 02:57
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
Сообщение от l-liava-l
|
Можно же не переопределять свойства Array.prototype, а сделать другой обьект, который будет перекрывать эти свойства для твоих sсope обьектов. Вреда вообще никакого, и считаться будет быстрее)
|
Не ну так я про то и говорю, ну перекрыли мы а человек новый аррей добавил, а что если этот новый аррей на 80% похож на старый? а что если человек использовал свои кастомные методы работы с массивом?
а что если человек через цикл for массив изменял? а что если концатенацией делал? вот и я про то)
|
|
09.12.2013, 03:13
|
Кандидат Javascript-наук
|
|
Регистрация: 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.
|
|
09.12.2013, 03:23
|
Профессор
|
|
Регистрация: 14.03.2012
Сообщений: 1,808
|
|
Цитата:
|
Не ну так я про то и говорю, ну перекрыли мы а человек новый аррей добавил, а что если этот новый аррей на 80% похож на старый? а что если человек использовал свои кастомные методы работы с массивом?
а что если человек через цикл for массив изменял? а что если концатенацией делал? вот и я про то)
|
А если не добавил? зачем тогда сравнивать столько элементов? Может запилить что то гибридное.
__________________
Научу себя плохому
|
|
|
|