Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Как найти различие между двумя массивами? (https://javascript.ru/forum/offtopic/43511-kak-najjti-razlichie-mezhdu-dvumya-massivami.html)

Maxmaxmaximus4 09.12.2013 17:50

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

cyber, чувак, выручай) ты придумал эту кашу, придумай как сделать чтобы она учитывала порядок и

12345 корректно превращалось в 54321, пожааалуйста ну пожаалуйста)!

рони 09.12.2013 17:50

Цитата:

Сообщение от cyber
Если элемента нет во втором массиве, но есть в первом то его нужно удалить.

можно написать цикл пока есть в oldArray элемент с индексом newArray.length его удалить - но можно проще просто изменить длину массива

рони 09.12.2013 17:52

Цитата:

Сообщение от Maxmaxmaximus4
порядок учитывало

или мой вариант это делает или обьясни про порядок

cyber 09.12.2013 17:53

Maxmaxmaximus4, ок, как только закончу с курсовой , посмотрю что можно придумать)

рони 09.12.2013 18:06

:write:
var changes = {
       insert : [[0, 5], [1, 4], [2, 3], [3, 2]],
       length : 5,
       relocation :	[]
   }
function conversion(b, c) {
    for (var a = 0; a < c.relocation.length; a++) {
        var d = c.relocation[a];
        b = b.splice(d[0], d[1]).concat(b)
    }
    for (a = 0; a < c.insert.length; a++) d = c.insert[a], b.splice(d[0], 0, d[1]);
    b.length = c.length;
    return b
};
alert( conversion([1, 2, 3, 4, 5],changes));
alert( conversion([1, 2, 3, 4, 5, 6, 7, 8, 20, 30],changes))

DjDiablo 09.12.2013 18:10

Рони
Я подставил значения
var oldArray = [3,3,5,6,7,8,9,0,2,9,0,6,0];
var newArray = [3,3,9,0,3,8,9,0,5,6,7,2,8,9,0,6,0];

У тебя 12 операций уходит, хотя достаточно девяти.

рони 09.12.2013 18:17

DjDiablo,
да скрипт не ставит найденные одинаковые цепочки сразу на свои места -- цепочки "доползают" до своего места по мере вставки недостающих элементов.

cyber 09.12.2013 18:36

Цитата:

Сообщение от рони
можно написать цикл пока есть в oldArray элемент с индексом newArray.length его удалить - но можно проще просто изменить длину массива

я конечно нечего не хочу сказать, но моя функция немного меньше операций предлагает, и из за твоей у меня пк подвисает на core i7))
http://learn.javascript.ru/play/feUHP

рони 09.12.2013 18:46

DjDiablo,
3,3,5,6,7,8,9,0,2,9,0,6,0<br>
6,0,3,3,5,6,7,8,9,0,2,9,0<br>
8,9,0,6,0,3,3,5,6,7,2,9,0<br>
5,6,7,8,9,0,6,0,3,3,2,9,0<br>
8,9,0,5,6,7,6,0,3,3,2,9,0<br>
9,0,8,9,0,5,6,7,6,0,3,3,2<br>
3,3,9,0,8,9,0,5,6,7,6,0,2<br>
3,3,9,0,3,8,9,0,5,6,7,6,0,2<br>
3,3,9,0,3,8,9,0,5,6,7,2,6,0,2<br>
3,3,9,0,3,8,9,0,5,6,7,2,8,6,0,2<br>
3,3,9,0,3,8,9,0,5,6,7,2,8,9,6,0,2<br>
3,3,9,0,3,8,9,0,5,6,7,2,8,9,0,6,0,2<br>

Maxmaxmaximus4 09.12.2013 18:51

ш...што вы делаете наркоманы О_О

я уже кстати почти допилил рабочую функцию =) при условии что реплейс приоритетнее, удаления и вставки.
то есть 10 реплейсов, приоритетнее 10 удалений и вставок. а это как раз то что нужно для ui, потому что перерисовать то что есть в уже готовом элементе мне не составит труда

$scope[itemName] = arr[index];
$scope.$digest(); // зарендерить элемент

а вот удалить и создать новый это то же самое что и тут тока новый парсинг дом этого элемента)


Часовой пояс GMT +3, время: 20:47.