Javascript 数组包含/包含子数组

新手上路,请多包涵

我需要检查一个数组是否包含另一个数组。子数组的顺序很重要,但实际偏移量并不重要。它看起来像这样:

 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
}

那么如何以优雅/高效的方式完成呢?

原文由 Victor Axelsson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 383
1 个回答

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]));

原文由 Nina Scholz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题