Вариант №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;
};