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)

danik.js 20.02.2015 13:42

Цитата:

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

Зачем каждый? Как только нашли повторяющийся, за ним последуют остальные повторяющиеся, разве не так?
А indexOf как раз и находит первый повторяющийся, если он есть.

kotlov-net 21.02.2015 03:06

Вроде вот так можно, но не уверен:)
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' ]

Вообще, по-моему, задача в общем случае, неразрешима. Неизвестно, какие данные придут в новый массив, они могут в любом подмножестве совпадать с исходными. Поэтому нет надежного шаблона для проверки.

Aetae 21.02.2015 03:20

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] //полностью сменился
И что будете делать?

laimas 21.02.2015 13:35

>второй массив, это первый, но сколько добавилось, на столько он сдвинулся
......
>если в первом массиве 10 элементов, и мне во второй пришло 10, то все 10 элементов второго массива сместились и совпадений не будет


Уже не первый, и значит вполне возможно, что логика вложенная в решение задачи неудачна, так как эффективность этой проверки будет убывать по мере сдвига второго массива. А можно словами описать задачу, которую вы хотите решить, и для которой потребовался этот поиск? Может быть как раз сервер сразу бы возвращал ответ, как говорил danik.js?


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