关于一个数组是否包含另一个数组的所有元素,并且它们只返回true或false,有很多问题,但是我需要它的起始位置的索引,
示例:
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语句的解决方案。
我试过这样的方法,但失败得太严重了
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;}
}注意到,我还没有尝试过比较一个数组和另一个数组
谢谢大家的帮助
发布于 2019-10-11 04:21:31
您可以检查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);
发布于 2019-10-11 04:31:04
您可以使用array1检查从不同索引开始的array2片是否等于every。
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));
https://stackoverflow.com/questions/58334168
复制相似问题