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]; |
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 из старого массива нужно удалить |
cyber, походу я наркоман, я забыл что ты replace не сделал. щас добавлю replase в твою реализацию и посмотрим как фурычит. но пока, я должен признаться, я охренел) так просто вроде все сделал. если честно я вообще в ахуе, не верится что оно работает)
|
к слову, вот здесь он должен выдать
var oldArray = [1, 2, 2, 200, 6, 6]; var newArray = [1, 2, 2, 200, 200, 6]; replaсe:[4], remove:[], insert:[] задача то кратчайшее преобразование найти |
Давай подумаем как в эту реализацию можно добавить 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, лучше ищи нормальный вариант, так как мой работает слишком медленно даже для сравнения массива из 100 элементов.
http://learn.javascript.ru/play/7rjdL |
я обьясню почему, просто это тут у нас ладно li, а вдруг у нас там в этом li целые контроллеры и куча детей это допустим сообщения в чате и они сложные там стока разметки в каждом и.т.п. не хотелось бы ПРОСТО ТАК удалять одно и заменять другим, дело в том что ui изменения то автоматически перерисовывает. ладно я думаю это мелочи, вообще ты гений блин) это то что нужно! СПАСИБО! Я даже показывать не буду какого монстра Я напилил)
Цитата:
|
Maxmaxmaximus4, хотя, тест какой то кривой, щас проверю скорость выполнения и скажу)
|
cyber, кстати зачем ты ставишь такое ядерное количество красных строк там где они по смыслу не нужны? они же теряют свою ценность так и когда они ВЕЗДЕ, настоящие красные строки не заметны =)
шо-то с тестом явно не так ![]() |
Цитата:
|
Часовой пояс GMT +3, время: 06:16. |