Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.02.2015, 18:04
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

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

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

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

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

т.е. перебрать по сути надо каждый элемент первого
Ответить с цитированием
  #2 (permalink)  
Старый 19.02.2015, 18:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 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);
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 19.02.2015, 19:36
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

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

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

Последний раз редактировалось desperado, 19.02.2015 в 19:38.
Ответить с цитированием
  #4 (permalink)  
Старый 19.02.2015, 19:50
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Это все бесконтрольно что-ли происходит? Почему нельзя сразу, при изменении array2 учитывать все что нужно?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 20.02.2015, 10:50
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

Сообщение от danik.js Посмотреть сообщение
Это все бесконтрольно что-ли происходит? Почему нельзя сразу, при изменении array2 учитывать все что нужно?
делается запрос к серверу, в ответе массив, потом происходит какое то событие и опять запрос к серверу, в этом массиве вначале уже новые элементы. Вот по сути 2 массива и хотелось бы эти новые элементы отловить.
Ответить с цитированием
  #6 (permalink)  
Старый 20.02.2015, 11:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Значит сервер формирует массив. А попросить его сформировать третий массив нельзя? Или просто индекс последнего нового элемента.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 20.02.2015, 11:46
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

Сообщение от danik.js Посмотреть сообщение
Значит сервер формирует массив. А попросить его сформировать третий массив нельзя? Или просто индекс последнего нового элемента.
никого просить нельзя, надо отработать что дают.
Ответить с цитированием
  #8 (permalink)  
Старый 20.02.2015, 12:04
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну тогда indexOf. Если indexOf == -1, то значит весь массив состоит из новых элементов. Забираем его. Если нужна именно копия, то делаем через slice(0, array.length).
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 20.02.2015, 12:26
Аспирант
Отправить личное сообщение для desperado Посмотреть профиль Найти все сообщения от desperado
 
Регистрация: 26.08.2014
Сообщений: 51

Сообщение от danik.js Посмотреть сообщение
Ну тогда indexOf. Если indexOf == -1, то значит весь массив состоит из новых элементов. Забираем его. Если нужна именно копия, то делаем через slice(0, array.length).
не оч ясно. нужно каждый элемент нового массива сравнить с каждым второго....новый ли он.
Ответить с цитированием
  #10 (permalink)  
Старый 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))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jquery: выбрать 1,6,11,16... элементы SunYang jQuery 1 22.05.2013 16:34
Как выбрать li элементы из первого уровня меню TicTac Общие вопросы Javascript 9 02.05.2013 21:05
Выбрать элементы, в которые вложен элемент с id. Вадимчег jQuery 3 24.11.2012 10:38
Выбрать все элементы, имеющие id rockerror Events/DOM/Window 4 07.11.2011 15:04
Выбрать элементы где значение атрибута меньше или больше заданного Neokortex jQuery 5 03.10.2011 14:23