Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 08.12.2013, 19:03
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

nerv_, почти верно =) но все немного сложнее.

У меня есть 2 массива и 2 каретки, вначале обе каретки на нулях, начинаем итерировать.

1) смотрим, если значения равны, увеличиваем обе каретки на 1 continiue.
2) смотрим, если значения не равны, то начинаем делать грязь, вначале одну каретку держим на месте, а второй пробегаемся вперед пока не наткнемся на такие же число которое в первой каретке, запоминаем какое расстояние пробежала вторая каретка. Потом делаем то же самое с первой кареткой. получаем 2 кратчайщих расстояния до ближайшего "совпадения" элементов.

3) смотрим, если первое расстояние больше, то элементы были удалены, если второе больше то добавлены.

короче трудно описать словами как сделаю покажу


Сообщение от nerv_
upd: в пыхе, кстати есть http://php.net/manual/ru/function.levenshtein.php и http://www.php.net/manual/ru/function.similar-text.php

upd2: А вот левенштейн на js

ай красавец)!! но оно какой-то бред выдает)

Грубо говоря я хочу получить карту изменения которые мне надо произвести чтобы получить из одного массива второй =)

Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 19:08.
Ответить с цитированием
  #12 (permalink)  
Старый 08.12.2013, 19:08
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Maxmaxmaximus4
У меня есть 2 массива и 2 каретки, вначале обе каретки на нулях, начинаем итерировать.
одна каретка и массив индексов другого массива. Массив индексов нужен, чтобы можно выбросить из поиска любой элемент второго массива (индекс), а также "удалить" те, кот. остались "не найденными" после прохода по первому массиву.

Короче, это гемор
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #13 (permalink)  
Старый 08.12.2013, 19:13
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

nerv_, так ты определишь вставку, а как ты определишь что элементы были удалены не пробегаясь по второму массиву?

И вообще давай ка код раз такой умный) мне кажется у тебя не получится пробегаться только по одному массиву.
Ответить с цитированием
  #14 (permalink)  
Старый 08.12.2013, 20:27
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

при чем моя реализация уже возвращает обьект типа

{
remove:[{start:3,end:4},{start:6,end:11}],
insert:[{start:1,end:2}],
replace:[]
}
Ответить с цитированием
  #15 (permalink)  
Старый 08.12.2013, 20:47
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Maxmaxmaximus4,
может проще форкнуть ангуляр?
Ответить с цитированием
  #16 (permalink)  
Старый 08.12.2013, 20:53
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 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]));
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #17 (permalink)  
Старый 08.12.2013, 21:03
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 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.
Ответить с цитированием
  #18 (permalink)  
Старый 08.12.2013, 21:57
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 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);
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #19 (permalink)  
Старый 08.12.2013, 22:08
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от Maxmaxmaximus4
 
Регистрация: 08.12.2013
Сообщений: 142

cyber, я вообще не понимаю чо делает твоя функция она должна возвращать массив индексов, а не массив значений.

Сообщение от cyber
честно , завязывай с наркотиками...
это ты завязывай, если тебе говорят что ты хуйню делаешь значит прислушивайся, тем более если это говорю я, а не оскорбляй.

Последний раз редактировалось Maxmaxmaximus4, 08.12.2013 в 22:14.
Ответить с цитированием
  #20 (permalink)  
Старый 08.12.2013, 22:34
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 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]));
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно найти разрешение рабочей области браузера? Влад Общие вопросы Javascript 3 20.07.2009 10:18
Как найти конец плоского файла Don_001 Общие вопросы Javascript 1 07.07.2009 12:47
Как можно изменить расстояние между панелями overlay и filmstrip в фотогалереи? Honey jQuery 0 29.06.2009 10:16
как найти нужный объект? `p r o x y jQuery 2 05.05.2009 01:12
Как найти путь к файлу для модификации? JuliaMilan Firefox/Mozilla 0 31.03.2009 14:06