Выбрать элементы с одного массива, которых нет в другом
Всем привет. Есть 2 массива:
[1, 2, 3, 4, 5] [0, 7, 1, 2, 3] во второй массив добавляются новые элементы, (второй массив, это первый, но сколько добавилось, на столько он сдвинулся) как найти новые добавленные элементы массива, в данном случае 0 и 7 (и из них сделать отдельный массив) ?? т.е. перебрать по сути надо каждый элемент первого |
Правильно я понял, что первый элемент первого массива обязательно присутствует во втором массиве?
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); |
Цитата:
спасибо за ответ. Не факт, что он присутствует :) если в первом массиве 10 элементов, и мне во второй пришло 10, то все 10 элементов второго массива сместились и совпадений не будет :) |
Это все бесконтрольно что-ли происходит? Почему нельзя сразу, при изменении array2 учитывать все что нужно?
|
Цитата:
|
Значит сервер формирует массив. А попросить его сформировать третий массив нельзя? Или просто индекс последнего нового элемента.
|
Цитата:
|
Ну тогда indexOf. Если indexOf == -1, то значит весь массив состоит из новых элементов. Забираем его. Если нужна именно копия, то делаем через slice(0, array.length).
|
Цитата:
|
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)) |
Цитата:
А indexOf как раз и находит первый повторяющийся, если он есть. |
Вроде вот так можно, но не уверен:)
arr1=[1,2,30,4,5] arr2=[9,80,1,2,30] extract=function(oldArr, newArr){ var i=0, ns="", oldArr=oldArr.join(), newArr=newArr.join() while(!new RegExp("^"+newArr.slice(i)).test(oldArr)) {ns+=newArr[i]; i++} return ns.split(",").filter(function(x){return x!==""}) } alert(extract(arr1, arr2)) //>>>> [ '9', '80' ] Вообще, по-моему, задача в общем случае, неразрешима. Неизвестно, какие данные придут в новый массив, они могут в любом подмножестве совпадать с исходными. Поэтому нет надежного шаблона для проверки. |
kotlov-net прав.
array1 = [1, 2, 3, 4, 5] array2 = [1, 2, 3, 1, 2] array1 = [1, 2, 3, 4, 5] array2 = [1, 2, 3, 4, 5] //полностью сменилсяИ что будете делать? |
>второй массив, это первый, но сколько добавилось, на столько он сдвинулся
...... >если в первом массиве 10 элементов, и мне во второй пришло 10, то все 10 элементов второго массива сместились и совпадений не будет Уже не первый, и значит вполне возможно, что логика вложенная в решение задачи неудачна, так как эффективность этой проверки будет убывать по мере сдвига второго массива. А можно словами описать задачу, которую вы хотите решить, и для которой потребовался этот поиск? Может быть как раз сервер сразу бы возвращал ответ, как говорил danik.js? |
Часовой пояс GMT +3, время: 20:07. |