19.02.2015, 18:04
|
Аспирант
|
|
Регистрация: 26.08.2014
Сообщений: 51
|
|
Выбрать элементы с одного массива, которых нет в другом
Всем привет. Есть 2 массива:
[1, 2, 3, 4, 5]
[0, 7, 1, 2, 3]
во второй массив добавляются новые элементы, (второй массив, это первый, но сколько добавилось, на столько он сдвинулся)
как найти новые добавленные элементы массива, в данном случае 0 и 7 (и из них сделать отдельный массив) ??
т.е. перебрать по сути надо каждый элемент первого
|
|
19.02.2015, 18:41
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Правильно я понял, что первый элемент первого массива обязательно присутствует во втором массиве?
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);
__________________
В личку только с интересными предложениями
|
|
19.02.2015, 19:36
|
Аспирант
|
|
Регистрация: 26.08.2014
Сообщений: 51
|
|
Сообщение от danik.js
|
Правильно я понял, что первый элемент первого массива обязательно присутствует во втором массиве?
|
спасибо за ответ. Не факт, что он присутствует
если в первом массиве 10 элементов, и мне во второй пришло 10, то все 10 элементов второго массива сместились и совпадений не будет
Последний раз редактировалось desperado, 19.02.2015 в 19:38.
|
|
19.02.2015, 19:50
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Это все бесконтрольно что-ли происходит? Почему нельзя сразу, при изменении array2 учитывать все что нужно?
__________________
В личку только с интересными предложениями
|
|
20.02.2015, 10:50
|
Аспирант
|
|
Регистрация: 26.08.2014
Сообщений: 51
|
|
Сообщение от danik.js
|
Это все бесконтрольно что-ли происходит? Почему нельзя сразу, при изменении array2 учитывать все что нужно?
|
делается запрос к серверу, в ответе массив, потом происходит какое то событие и опять запрос к серверу, в этом массиве вначале уже новые элементы. Вот по сути 2 массива и хотелось бы эти новые элементы отловить.
|
|
20.02.2015, 11:30
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Значит сервер формирует массив. А попросить его сформировать третий массив нельзя? Или просто индекс последнего нового элемента.
__________________
В личку только с интересными предложениями
|
|
20.02.2015, 11:46
|
Аспирант
|
|
Регистрация: 26.08.2014
Сообщений: 51
|
|
Сообщение от danik.js
|
Значит сервер формирует массив. А попросить его сформировать третий массив нельзя? Или просто индекс последнего нового элемента.
|
никого просить нельзя, надо отработать что дают.
|
|
20.02.2015, 12:04
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Ну тогда indexOf. Если indexOf == -1, то значит весь массив состоит из новых элементов. Забираем его. Если нужна именно копия, то делаем через slice(0, array.length).
__________________
В личку только с интересными предложениями
|
|
20.02.2015, 12:26
|
Аспирант
|
|
Регистрация: 26.08.2014
Сообщений: 51
|
|
Сообщение от danik.js
|
Ну тогда indexOf. Если indexOf == -1, то значит весь массив состоит из новых элементов. Забираем его. Если нужна именно копия, то делаем через slice(0, array.length).
|
не оч ясно. нужно каждый элемент нового массива сравнить с каждым второго....новый ли он.
|
|
20.02.2015, 12:31
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
desperado,
вариант
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))
|
|
|
|