首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查数组是否包含另一个数组的所有元素,并得到相应的索引。

检查数组是否包含另一个数组的所有元素,并得到相应的索引。
EN

Stack Overflow用户
提问于 2019-10-11 04:15:43
回答 2查看 378关注 0票数 0

关于一个数组是否包含另一个数组的所有元素,并且它们只返回true或false,有很多问题,但是我需要它的起始位置的索引,

示例:

代码语言:javascript
运行
复制
array1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
array2 = [7,8,9,10,11];

应该是指数=6

编辑:我有一个静态或常量数组,其数字如下:2,5,10,5,5,8,8,4,4,6,7,6,3,8,2,4

我会得到一个数字数组:2,8,3,8,4,2,2,2,2,2,2,8,2,6,2,5,10,5,5,5,8,1,4,6,2,7,6,2,7,6,3,8,2,4,2,3,7,3,12,3,8,2,2,6,3,2,3,2,9,2,5,2,3,5

我需要找到数字序列和开始位置的索引(在本例中为14)。

这就是为什么我要求一个简单的循环和if语句的解决方案。

我试过这样的方法,但失败得太严重了

代码语言:javascript
运行
复制
for (var i = 0; i < array_Input.length; i++) {
            if (array_Input[i] == 2 && array_Input[i+1] == 5 && array_Input[i+2] == 10 && array_Input[i+3] == 5 && array_Input[i+4] == 5 && array_Input[i+5] == 5) {var index=+ 1;} 
        }

注意到,我还没有尝试过比较一个数组和另一个数组

谢谢大家的帮助

EN

回答 2

Stack Overflow用户

发布于 2019-10-11 04:21:31

您可以检查array1是否包含array2的所有值:

代码语言:javascript
运行
复制
let array1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
let array2 = [7,8,9,10,11];

let minOfArray2 = Math.min(...array2);

let flag = true;
let indexWhereItStarts;
let found = false;

array2.map( val => {
    if(!array1.includes(val)) flag = false;
});

array1.map( (val, index) => {
    if(val === minOfArray2) indexWhereItStarts = index;
});

console.log(flag);
console.log(indexWhereItStarts);

或者,您可以使用两条线(减少方法)来检查所有内容:

代码语言:javascript
运行
复制
    let array1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
    let array2 = [7,8,9,10,11];

    let minOfArray2 = Math.min(...array2);

    let flag2 = array2.reduce((acc,val) => array1.includes(val) ? acc && true : false, true); 

    let indexWhereItStarts2 = array1.reduce((acc, val, i) => val === minOfArray2 ? i : acc, 0);

    console.log(flag2);
    console.log(indexWhereItStarts2);

票数 0
EN

Stack Overflow用户

发布于 2019-10-11 04:31:04

您可以使用array1检查从不同索引开始的array2片是否等于every

代码语言:javascript
运行
复制
function findIndex(a1, a2) {
  for (var i = 0; i < a1.length - a2.length + 1; i++) {
    if (a1.slice(i, i + a2.length).every((n, j) => n === a2[j])) return i;
  }
  return -1;
}

var array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
var array2 = [7, 8, 9, 10, 11];
console.log(findIndex(array1, array2));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58334168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档