我需要检查一个数组是否包含另一个数组.子阵列的顺序很重要,但实际的偏移并不重要.它看起来像这样:
var master = [12, 44, 22, 66, 222, 777, 22, 22, 22, 6, 77, 3]; var sub = [777, 22, 22];
所以我想知道是否master
包含以下内容sub
:
if(master.arrayContains(sub) > -1){ //Do awesome stuff }
那怎样才能以优雅/高效的方式完成呢?
从fromIndex
参数的一点帮助
该解决方案在索引上具有闭包,用于在数组中搜索元素的开始位置.如果找到子数组的元素,则搜索下一个元素将以递增的索引开始.
function hasSubArray(master, sub) {
return sub.every((i => v => i = master.indexOf(v, i) + 1)(0));
}
var array = [12, 44, 22, 66, 222, 777, 22, 22, 22, 6, 77, 3];
console.log(hasSubArray(array, [777, 22, 22]));
console.log(hasSubArray(array, [777, 22, 3]));
console.log(hasSubArray(array, [777, 777, 777]));
console.log(hasSubArray(array, [42]));