Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Выбрать элементы с одного массива, которых нет в другом (https://javascript.ru/forum/css-html/53813-vybrat-ehlementy-s-odnogo-massiva-kotorykh-net-v-drugom.html)

desperado 19.02.2015 18:04

Выбрать элементы с одного массива, которых нет в другом
 
Всем привет. Есть 2 массива:

[1, 2, 3, 4, 5]
[0, 7, 1, 2, 3]

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

как найти новые добавленные элементы массива, в данном случае 0 и 7 (и из них сделать отдельный массив) ??

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

danik.js 19.02.2015 18:41

Правильно я понял, что первый элемент первого массива обязательно присутствует во втором массиве?

var array1 = [1, 2, 3, 4, 5];
var array2 = [0, 7, 1, 2, 3];

var diff = array2.slice(0, array2.indexOf(array1[0]));

alert(diff);

desperado 19.02.2015 19:36

Цитата:

Сообщение от danik.js (Сообщение 357343)
Правильно я понял, что первый элемент первого массива обязательно присутствует во втором массиве?


спасибо за ответ. Не факт, что он присутствует :)
если в первом массиве 10 элементов, и мне во второй пришло 10, то все 10 элементов второго массива сместились и совпадений не будет :)

danik.js 19.02.2015 19:50

Это все бесконтрольно что-ли происходит? Почему нельзя сразу, при изменении array2 учитывать все что нужно?

desperado 20.02.2015 10:50

Цитата:

Сообщение от danik.js (Сообщение 357357)
Это все бесконтрольно что-ли происходит? Почему нельзя сразу, при изменении array2 учитывать все что нужно?

делается запрос к серверу, в ответе массив, потом происходит какое то событие и опять запрос к серверу, в этом массиве вначале уже новые элементы. Вот по сути 2 массива и хотелось бы эти новые элементы отловить.:)

danik.js 20.02.2015 11:30

Значит сервер формирует массив. А попросить его сформировать третий массив нельзя? Или просто индекс последнего нового элемента.

desperado 20.02.2015 11:46

Цитата:

Сообщение от danik.js (Сообщение 357429)
Значит сервер формирует массив. А попросить его сформировать третий массив нельзя? Или просто индекс последнего нового элемента.

никого просить нельзя, надо отработать что дают.

danik.js 20.02.2015 12:04

Ну тогда indexOf. Если indexOf == -1, то значит весь массив состоит из новых элементов. Забираем его. Если нужна именно копия, то делаем через slice(0, array.length).

desperado 20.02.2015 12:26

Цитата:

Сообщение от danik.js (Сообщение 357450)
Ну тогда indexOf. Если indexOf == -1, то значит весь массив состоит из новых элементов. Забираем его. Если нужна именно копия, то делаем через slice(0, array.length).

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

рони 20.02.2015 12:31

desperado,
:write: вариант
var array1 = [1, 2, 3, 4, 5],
    array2 = [0, 7, 1, 2, 3];

function foo(arr1, arr2) {
    var diff = [];
    for (var i = 0; i < arr2.length; i++) {
        if (arr1[i] != arr2[i]) {
            diff.push(arr2.shift());
            i = 0
        }
    }
    return diff
}
alert(foo(array1, array2))


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