08.12.2013, 22:39
|
Кандидат Javascript-наук
|
|
Регистрация: 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];
|
|
08.12.2013, 22:45
|
|
I am Student
|
|
Регистрация: 17.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 из старого массива нужно удалить
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
08.12.2013, 23:03
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
cyber, походу я наркоман, я забыл что ты replace не сделал. щас добавлю replase в твою реализацию и посмотрим как фурычит. но пока, я должен признаться, я охренел) так просто вроде все сделал. если честно я вообще в ахуе, не верится что оно работает)
Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 23:06.
|
|
08.12.2013, 23:22
|
Кандидат Javascript-наук
|
|
Регистрация: 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:[]
задача то кратчайшее преобразование найти
|
|
08.12.2013, 23:30
|
Кандидат Javascript-наук
|
|
Регистрация: 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 в 23:41.
|
|
08.12.2013, 23:47
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Maxmaxmaximus4, лучше ищи нормальный вариант, так как мой работает слишком медленно даже для сравнения массива из 100 элементов.
http://learn.javascript.ru/play/7rjdL
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
08.12.2013, 23:47
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
я обьясню почему, просто это тут у нас ладно li, а вдруг у нас там в этом li целые контроллеры и куча детей это допустим сообщения в чате и они сложные там стока разметки в каждом и.т.п. не хотелось бы ПРОСТО ТАК удалять одно и заменять другим, дело в том что ui изменения то автоматически перерисовывает. ладно я думаю это мелочи, вообще ты гений блин) это то что нужно! СПАСИБО! Я даже показывать не буду какого монстра Я напилил)
Сообщение от cyber
|
так как мой работает слишком медленно
|
он будет вызываться только если обсервер обнаружит изменения в массиве=) так что это не страшно, это миллисекунды, они КУДА быстрее чем вставка и перерисовка DOM
|
|
08.12.2013, 23:49
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Maxmaxmaximus4, хотя, тест какой то кривой, щас проверю скорость выполнения и скажу)
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
08.12.2013, 23:54
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
cyber, кстати зачем ты ставишь такое ядерное количество красных строк там где они по смыслу не нужны? они же теряют свою ценность так и когда они ВЕЗДЕ, настоящие красные строки не заметны =)
шо-то с тестом явно не так
Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 23:57.
|
|
09.12.2013, 00:00
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Maxmaxmaximus4
|
cyber, кстати зачем ты ставишь такое ядерное количество красных строк там где они по смыслу не нужны? они же теряют свою ценность так и когда они ВЕЗДЕ, настоящие красные строки не заметны =)
|
мне так читать свой код легче потом)
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
|
|