关于一个数组是否包含另一个数组的所有元素,并且它们仅返回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;}
}
注意,我没有尝试比较一个数组与另一个数组
谢谢大家的帮助
答案 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');
}