Javascript.RU

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

cyber, чувак, сделай фикс уже search.indexOf(this[i], i);
Ответить с цитированием
  #42 (permalink)  
Старый 09.12.2013, 01:08
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Maxmaxmaximus4
cyber, чувак, сделай фикс уже search.indexOf(this[i], i);
Эм, понял о чем ты, я не увидел)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #43 (permalink)  
Старый 09.12.2013, 01:20
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Maxmaxmaximus4, ну тогда в общем replace не нужен
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #44 (permalink)  
Старый 09.12.2013, 01:36
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

Сообщение от cyber
ну тогда в общем replace не нужен
МНЕ - нужен, ну то есть собрать из старого массива новый используя только ремувы и инсерты я уже могу, реплейс это оптимизация, щас сижу добавляю его (реплейс это просто индексы значение которых надо поменять)

как ты вообще этот алгоритм придумал????????????????????????? сколько времени заняло? делал ли что-то подобное до этого? не ну, то есть , алгоритм то конечно тупой и брутальный, но РАБОТАЕТ ЖЕ)

Последний раз редактировалось Maxmaxmaximus4, 09.12.2013 в 01:44.
Ответить с цитированием
  #45 (permalink)  
Старый 09.12.2013, 01:40
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Maxmaxmaximus4, когда курсовую писал, нужно было сравнить 2 массива с изображениями что бы не перезагружать все, а разбираться с готовыми алгоритмами было влом поэтому сделал "в лоб".
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #46 (permalink)  
Старый 09.12.2013, 01:45
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

cyber, не ну, то есть , алгоритм то конечно тупой и брутальный, но РАБОТАЕТ ЖЕ) спасибо огромное
Ответить с цитированием
  #47 (permalink)  
Старый 09.12.2013, 02:41
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Ихих ребят вы чо, сравнение массивов по 2000 элементов из за парочки изменений это тоже не круто.

Цитата:
Конечно кто-то из вас скажет - просто сделай обертки на методы массива такие как pop push unshift и.т.п. и смотри как они вызываются и запоминай это, но я считчаю это костылем при чем грубым.
Можно же не переопределять свойства Array.prototype, а сделать другой обьект, который будет перекрывать эти свойства для твоих sсope обьектов. Вреда вообще никакого, и считаться будет быстрее)
__________________
Научу себя плохому
Ответить с цитированием
  #48 (permalink)  
Старый 09.12.2013, 02:57
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

Сообщение от l-liava-l
Можно же не переопределять свойства Array.prototype, а сделать другой обьект, который будет перекрывать эти свойства для твоих sсope обьектов. Вреда вообще никакого, и считаться будет быстрее)
Не ну так я про то и говорю, ну перекрыли мы а человек новый аррей добавил, а что если этот новый аррей на 80% похож на старый? а что если человек использовал свои кастомные методы работы с массивом?
а что если человек через цикл for массив изменял? а что если концатенацией делал? вот и я про то)
Ответить с цитированием
  #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.
Ответить с цитированием
  #50 (permalink)  
Старый 09.12.2013, 03:23
Профессор
Отправить личное сообщение для l-liava-l Посмотреть профиль Найти все сообщения от l-liava-l
 
Регистрация: 14.03.2012
Сообщений: 1,808

Цитата:
Не ну так я про то и говорю, ну перекрыли мы а человек новый аррей добавил, а что если этот новый аррей на 80% похож на старый? а что если человек использовал свои кастомные методы работы с массивом?
а что если человек через цикл for массив изменял? а что если концатенацией делал? вот и я про то)
А если не добавил? зачем тогда сравнивать столько элементов? Может запилить что то гибридное.
__________________
Научу себя плохому
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно найти разрешение рабочей области браузера? Влад Общие вопросы Javascript 3 20.07.2009 10:18
Как найти конец плоского файла Don_001 Общие вопросы Javascript 1 07.07.2009 12:47
Как можно изменить расстояние между панелями overlay и filmstrip в фотогалереи? Honey jQuery 0 29.06.2009 10:16
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
Как найти путь к файлу для модификации? JuliaMilan Firefox/Mozilla 0 31.03.2009 14:06