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, время: 09:35. |