Показать сообщение отдельно
  #24 (permalink)  
Старый 24.12.2013, 04:14
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Немного оптимизировал
var a1 = [1, 2, 3, 4, 5];
var a2 = [2, 4, 4, 2];
      var comparing = function (ar1, ar2) {
          var a, b, i, buf = {};
          ar1.length < ar2.length ? (a = ar1, b = ar2) : (a = ar2, b = ar1);
          for (i = 0; i < a.length; i++)  buf[a[i]] = 1;
          for (i = 0; i < b.length; i++) {
            if(buf[b[i]]) return true;
          }
          return false;
        }
alert(comparing(a1, a2));

алгоритм такой
1. Сравниваем длину массивов
2. Из меньшего делаем объект(алфавит) с оригинальными значениями. При таком подходе мы быстрее переходим непосредственно к нахождению первого вхождения. Но, это как бабка надвое гадала может в конечном результате привести к увеличению операций для поиска. В некоторых ситуациях следовало из массивов делать 2 объекта с оригинальными значениями. И сравнивать уже их.
3. Соответственно поиск совпадающего значения
http://javascript.ru/php/array_diff_key
http://javascript.ru/php/array_diff
Как вариант компактного
var a1 = [1, 2, 3, 4, 5];
var a2 = [2, 4, 4, 2];

var comparing = function (a, b) {
	var i, buf = {};
	for (i = 0; i < a.length; i++) buf[a[i]] = 1;
	for (i = 0; i < b.length; i++) if (buf[b[i]]) return true;
	return false;
};

alert(comparing(a1, a2));

Последний раз редактировалось Vlasenko Fedor, 24.12.2013 в 13:21.
Ответить с цитированием