Javascript.RU

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

cyber, слушай, ну она даже не справляется с этим
var arr1 = [3, 3, 3, 3, 3];
var arr2 = [3, 3, 11, 3, 3];

и с этим

var arr1 = [3, 3, 3, 3, 3];
var arr2 = [3, 3, 3, 3, 11];
Ответить с цитированием
  #22 (permalink)  
Старый 08.12.2013, 21:45
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

Maxmaxmaximus4, так либо ты наркомана, либо я.
Array.prototype.compare = function(arr) {
    
    var search = arr.slice(),
        insert = [],
        remove = [];
    
    for(var i = 0, index; i < this.length; i++) {
        
        index = search.indexOf(this[i]);

		if(!~index) {
          
			remove.push(i);
            
            continue;
        }
        
        delete search[index];

	};
    
    search.forEach(function (elem, i) {
        if(elem)
          insert.push(i);     
    });
    
    return {
        remove: remove,
        insert: insert
    }
    
}

//console.log([1,2,3,4].compare([2,3,4,5, 34, 2 , 3434]));

console.log([3, 3, 3, 3, 3].compare([3, 3, 11, 3, 3]));

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

cyber, походу я наркоман, я забыл что ты replace не сделал. щас добавлю replase в твою реализацию и посмотрим как фурычит. но пока, я должен признаться, я охренел) так просто вроде все сделал. если честно я вообще в ахуе, не верится что оно работает)

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

к слову, вот здесь он должен выдать

var oldArray = [1, 2, 2, 200, 6, 6];
var newArray = [1, 2, 2, 200, 200, 6];

replaсe:[4],
remove:[],
insert:[]

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

Давай подумаем как в эту реализацию можно добавить replace?

я тут слегка отрефакторил

Array.prototype.compare = function(arr) {
    var search = arr.slice();
    var insert = [];
    var remove = [];

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

    for (var i = 0; i < search.length; i++) {
      if (i in search) insert.push(i);
    }

    return {
      remove: remove,
      insert: insert
    }
}


по уму, взять и посмотреть где в remove и insert есть одинаковые элементы, это ознчает что там происходит удаление и вставка, то есть замена =) но нет, не всегда замены детектируется так, щас поищу я когда тестировал её там было пару случаев когда индексы разные были, если изменения происходили на коцне массива.

Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 22:41.
Ответить с цитированием
  #26 (permalink)  
Старый 08.12.2013, 22:47
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

Maxmaxmaximus4, лучше ищи нормальный вариант, так как мой работает слишком медленно даже для сравнения массива из 100 элементов.
http://learn.javascript.ru/play/7rjdL
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #27 (permalink)  
Старый 08.12.2013, 22:47
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

я обьясню почему, просто это тут у нас ладно li, а вдруг у нас там в этом li целые контроллеры и куча детей это допустим сообщения в чате и они сложные там стока разметки в каждом и.т.п. не хотелось бы ПРОСТО ТАК удалять одно и заменять другим, дело в том что ui изменения то автоматически перерисовывает. ладно я думаю это мелочи, вообще ты гений блин) это то что нужно! СПАСИБО! Я даже показывать не буду какого монстра Я напилил)

Сообщение от cyber
так как мой работает слишком медленно
он будет вызываться только если обсервер обнаружит изменения в массиве=) так что это не страшно, это миллисекунды, они КУДА быстрее чем вставка и перерисовка DOM
Ответить с цитированием
  #28 (permalink)  
Старый 08.12.2013, 22:49
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

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

cyber, кстати зачем ты ставишь такое ядерное количество красных строк там где они по смыслу не нужны? они же теряют свою ценность так и когда они ВЕЗДЕ, настоящие красные строки не заметны =)



шо-то с тестом явно не так

Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 22:57.
Ответить с цитированием
  #30 (permalink)  
Старый 08.12.2013, 23:00
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

Сообщение от Maxmaxmaximus4
cyber, кстати зачем ты ставишь такое ядерное количество красных строк там где они по смыслу не нужны? они же теряют свою ценность так и когда они ВЕЗДЕ, настоящие красные строки не заметны =)
мне так читать свой код легче потом)
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно найти разрешение рабочей области браузера? Влад Общие вопросы 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