08.12.2013, 19:03
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
nerv_, почти верно =) но все немного сложнее.
У меня есть 2 массива и 2 каретки, вначале обе каретки на нулях, начинаем итерировать.
1) смотрим, если значения равны, увеличиваем обе каретки на 1 continiue.
2) смотрим, если значения не равны, то начинаем делать грязь, вначале одну каретку держим на месте, а второй пробегаемся вперед пока не наткнемся на такие же число которое в первой каретке, запоминаем какое расстояние пробежала вторая каретка. Потом делаем то же самое с первой кареткой. получаем 2 кратчайщих расстояния до ближайшего "совпадения" элементов.
3) смотрим, если первое расстояние больше, то элементы были удалены, если второе больше то добавлены.
короче трудно описать словами как сделаю покажу
ай красавец)!! но оно какой-то бред выдает)
Грубо говоря я хочу получить карту изменения которые мне надо произвести чтобы получить из одного массива второй =)
Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 19:08.
|
|
08.12.2013, 19:08
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Maxmaxmaximus4
|
У меня есть 2 массива и 2 каретки, вначале обе каретки на нулях, начинаем итерировать.
|
одна каретка и массив индексов другого массива. Массив индексов нужен, чтобы можно выбросить из поиска любой элемент второго массива (индекс), а также "удалить" те, кот. остались "не найденными" после прохода по первому массиву.
Короче, это гемор
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
08.12.2013, 19:13
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
nerv_, так ты определишь вставку, а как ты определишь что элементы были удалены не пробегаясь по второму массиву?
И вообще давай ка код раз такой умный) мне кажется у тебя не получится пробегаться только по одному массиву.
|
|
08.12.2013, 20:27
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
при чем моя реализация уже возвращает обьект типа
{
remove:[{start:3,end:4},{start:6,end:11}],
insert:[{start:1,end:2}],
replace:[]
}
|
|
08.12.2013, 20:47
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Maxmaxmaximus4,
может проще форкнуть ангуляр?
|
|
08.12.2013, 20:53
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
так?
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]));
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
08.12.2013, 21:03
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
Сообщение от monolithed
|
может проще форкнуть ангуляр?
|
а там нет этого лол) там они вообще ядерно не оптимально делают)
я и хочу переплюнуть их по этому вот.
cyber, да, ты верно понял что надо =) тока твоя реализация не может схавать даже
var q = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var w = [1, 2, 4, 5, 6, 7, 8, 9];
Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 21:12.
|
|
08.12.2013, 21:57
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
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);
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
08.12.2013, 22:08
|
Кандидат Javascript-наук
|
|
Регистрация: 08.12.2013
Сообщений: 142
|
|
cyber, я вообще не понимаю чо делает твоя функция она должна возвращать массив индексов, а не массив значений.
Сообщение от cyber
|
честно , завязывай с наркотиками...
|
это ты завязывай, если тебе говорят что ты хуйню делаешь значит прислушивайся, тем более если это говорю я, а не оскорбляй.
Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 22:14.
|
|
08.12.2013, 22:34
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от Maxmaxmaximus4
|
cyber, я вообще не понимаю чо делает твоя функция она должна возвращать массив индексов, а не массив значений.
|
возможно я не очень внимательно читал, но исправить ее не проблема.
Сообщение от 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([1, 2, 3, 4, 5, 6, 7, 8, 9].compare([1, 2, 4, 5, 6, 7, 8, 9]));
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
|
|