检查数组是否包含另一个数组的所有元素并获取索引

时间:2019-10-11 04:15:43

标签: javascript arrays

关于一个数组是否包含另一个数组的所有元素,并且它们仅返回true或false,但存在很多疑问,但是我需要它从何处开始的索引

示例:

array1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
array2 = [7,8,9,10,11];

应为index = 6

编辑:我有一个带有以下数字的静态或常量数组:[2,5,10,5,5,5,8,1,4,6,2,7,6,3,8,2, 4]
我将得到一个像这样的数字数组:[2,8,3,8,4,2,3,2,2,4,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语句的简单解决方案

我尝试了类似的方法,但失败如此严重

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;} 
        }

注意,我没有尝试比较一个数组与另一个数组

谢谢大家的帮助

3 个答案:

答案 0 :(得分:0)

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

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

或者您可以使用两个一根衬管(减少方法)进行全部检查:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

const array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
const array2 = [7, 8, 9, 10, 11];

// get the index of first element of array2 in array1
let index = array1.indexOf(array2[0]);

let flag = true;
// loop through elements of array2
for (let i = 0; i < array2.length; i++) {
  // check any element in array1 is different
  if (array2[i] !== array1[index]) {
    flag = false;
    break;
  }
  // step to the next element in array1
  index++;
}

if (flag) {
  console.log(index - array2.length);
} else {
  console.log('Not found');
}