Сравнение двух массивов в Javascript - возвращение различий - PullRequest
8 голосов
/ 08 августа 2010

Предполагая, что у нас есть:

array1 = ['A', 'B', 'C', 'D', 'E']; array2 = ['C', 'E'];

Существует ли проверенное и быстрое решение для сравнения двух массивов друг с другом, возвращая один массив без значений, появляющихся в обоих массивах (здесь C и E).Итак:

array3 = ['A', 'B', 'D']

должно быть результатом решения.(jquery может быть вовлечен)

thx.

Ответы [ 3 ]

13 голосов
/ 08 августа 2010

Я принял решение Мэтьюса, но не хочу игнорировать другое быстрое решение, которое я только что нашел.

 var list1 = [1, 2, 3, 4, 5, 6];
 var list2 = ['a', 'b', 'c', 3, 'd', 'e'];
 var lookup = {};

 for (var j in list2) {
      lookup[list2[j]] = list2[j];
  }

  for (var i in list1) {
      if (typeof lookup[list1[i]] != 'undefined') {
          alert('found ' + list1[i] + ' in both lists');
          break;
 } 
 }

Источник: Оптимизация циклов для сравнения двух массивов

11 голосов
/ 08 августа 2010

Это установленная разница.Простая реализация:

jQuery.grep(array1, function(el)
                    {
                        return jQuery.inArray(el, array2) == -1;
                    });

Это O (m * n), где это размеры массивов.Вы можете сделать это в O (m + n), но вам нужно использовать какой-то хэш-набор.Вы можете использовать объект JavaScript в качестве простого хеш-набора для строк.Для сравнительно небольших массивов все вышеперечисленное должно подойти.

0 голосов
/ 08 августа 2010

проверенное быстрое решение, о котором я знаю, - это бинарный поиск, который вы можете использовать после сортировки одного из массивов.поэтому решение требует времени, которое зависит от алгоритма сортировки.но, по крайней мере, log (N).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...