nerv_, почти верно =) но все немного сложнее.
У меня есть 2 массива и 2 каретки, вначале обе каретки на нулях, начинаем итерировать. 1) смотрим, если значения равны, увеличиваем обе каретки на 1 continiue. 2) смотрим, если значения не равны, то начинаем делать грязь, вначале одну каретку держим на месте, а второй пробегаемся вперед пока не наткнемся на такие же число которое в первой каретке, запоминаем какое расстояние пробежала вторая каретка. Потом делаем то же самое с первой кареткой. получаем 2 кратчайщих расстояния до ближайшего "совпадения" элементов. 3) смотрим, если первое расстояние больше, то элементы были удалены, если второе больше то добавлены. короче трудно описать словами как сделаю покажу Цитата:
ай красавец)!! но оно какой-то бред выдает) Грубо говоря я хочу получить карту изменения которые мне надо произвести чтобы получить из одного массива второй =) |
Цитата:
Короче, это гемор :D |
nerv_, так ты определишь вставку, а как ты определишь что элементы были удалены не пробегаясь по второму массиву?
И вообще давай ка код раз такой умный) мне кажется у тебя не получится пробегаться только по одному массиву. |
при чем моя реализация уже возвращает обьект типа
{ remove:[{start:3,end:4},{start:6,end:11}], insert:[{start:1,end:2}], replace:[] } |
Maxmaxmaximus4,
может проще форкнуть ангуляр? :) |
так?
Array.prototype.compare = function(arr) { var search = arr.slice(), remove = []; for(var i = 0, index; i < this.length; i++) { index = search.indexOf(this[i]); if(!~index) { remove.push(this[i]); continue; } delete search[index]; }; return { remove: remove, insert: search } } console.log([1,2,3,4].compare([2,3,4,5, 34, 2 , 3434])); |
Цитата:
я и хочу переплюнуть их по этому вот. cyber, да, ты верно понял что надо =) тока твоя реализация не может схавать даже var q = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var w = [1, 2, 4, 5, 6, 7, 8, 9]; |
Maxmaxmaximus4, честно , завязывай с наркотиками...
Array.prototype.compare = function(arr) { var search = arr.slice(), remove = []; for(var i = 0, index; i < this.length; i++) { index = search.indexOf(this[i]); if(!~index) { remove.push(this[i]); continue; } delete search[index]; }; return { remove: remove, insert: search } } //console.log([1,2,3,4].compare([2,3,4,5, 34, 2 , 3434])); alert([1, 2, 3, 4, 5, 6, 7, 8, 9].compare([1, 2, 4, 5, 6, 7, 8, 9]).remove); |
cyber, я вообще не понимаю чо делает твоя функция она должна возвращать массив индексов, а не массив значений.
Цитата:
|
Цитата:
Цитата:
Хотя насчет скорости я не уверен) 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([1, 2, 3, 4, 5, 6, 7, 8, 9].compare([1, 2, 4, 5, 6, 7, 8, 9])); |
Часовой пояс GMT +3, время: 07:13. |