Показать сообщение отдельно
  #8 (permalink)  
Старый 16.07.2014, 13:13
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от nesfiraty
мне пока трудно ориентироваться в циклах и прочих нюансах)) они пока не очевидны для меня)))
На мой взгляд, циклы в принципе неочевидны. Да без них можно и обойтись. Я считаю, более правильным не хреначить всё за раз кучей циклов, а разбивать задачу на кусочки. Допустим, нужно проверять, входит ли массив в другой массив. Сравнение массивов можно вынести отдельно. Опять же, вдруг ещё где пригодится. И получается:
function isEqual(a, b) {
  return a.length == b.length && a.every(isEqual, b);
  
  function isEqual(value, index) {
    return value === this[index];
  }
};

function contains(a, b) {
  return a.length >= b.length && a.some(contains, b);
  
  function contains(value, index, array) {
    var slice = array.slice(index, index + this.length);
    return isEqual(slice, this);
  }
};


var array1 = ["п","р","ы","в","е","т"],
    array2 = ["п","р"];
    
alert( contains(array1, array2) );

На практике, лично мне, почти всегда, для манипуляций с массивами, хватает стандартных методов forEach, map, filter, indexOf, reduce.
Ответить с цитированием