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

Вариант №1 Возвращает false или индекс элемента с которого начинается совпадение
Да первый вариант стоит того. Не знаю может кто красивее напишет
var a1 = [2, 5, 2, 4];
      var a2 = [2, 4];
      var a3 = [3, 4];
      var a4 = [5];

      alert(isSubset(a1, a2));
      alert(isSubset(a1, a3));
      alert(isSubset(a1, a4));

      function isSubset(a1, a2) {
        var i = 0,
          j = 1,
          ind = 0,
          maxid = a2.length - 1;

        for (; i < a1.length; i++) {
          if (a1.length - i == maxid) return false;
          if (a1[i] != a2[0]) continue;
          ind = i;
          if (maxid == 0) return ind;
          
          for (; j < a2.length; j++) {
            if (a1.length - i == maxid) return false;
            if (a2[j] != a1[i+1]) break;
            if (j == maxid) return ind;
          }

        }
        return false;
      };

Вариант 3. Самый простой. Цикл внутри цикла. Находит единственное совпадение
var a1 = [2, 5, 2, 4];
      var a2 = [7, 8];
      var a3 = [3, 4];
      var a4 = [5];

      alert(isSubset(a1, a2));
      alert(isSubset(a1, a3));
      alert(isSubset(a1, a4));

      function isSubset(a1, a2) {
        for (var i = 0; i < a2.length; i++) {
          for (var j = 0; j < a1.length; j++) {
            if (a2[i] == a1[j]) return true;
          }
        }
        return false;
      };

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