如何比较两个不同数组中的连续元素
How to compare consecutive elements in two different arrays
我有两个数组,它们都有唯一的值,我想比较它们,以便我得到一个包含连续
的所有值的列表
const array1 = [1a,4a,3h,78h,5b,6b,7h]
const array2 = [3h,1a,4a,5b,6b,7h]
在这种情况下,我想比较任意数量的连续匹配值
我想要一个所有对的列表或它们具有的任意数量的连续匹配的唯一值,然后给我一个这样的列表
const array3 =[[1a,4a],[5b,6b,7h]]
解决此问题的最佳方法是什么?
我能想到的唯一解决方案是(应该有很多更好的),首先创建所有可能的子数组:
例如:
const array1 = [1a,4a,3h,78h,5b,6b,7h]
const array2 = [3h,1a,4a,5b,6b,7h]
const 子数组 = [[1a,4a],[3h],[5b,6b,7h]]
一旦你有了子数组,你就可以将它们映射到一个新数组,其中它们在任一数组中相对于子数组的最大位置:
const maxLocation = [[1,2][2][4,5,6]];
现在你需要找到最长的序列=> [[1,2][4,5,6]]
fetchValues = (array1, array2) => {
let result = [[]];
let loop = (i, j) => {
if (i >= array1.length || j >= array2.length) {
return;
}
if (array1[i] == array2[j]) {
result[result.length - 1].push(array1[i]);
loop(++i, ++j);
return;
}
let nextIndex1 = array1.indexOf(array2[j], i);
let nextIndex2 = array2.indexOf(array1[i], j);
nextIndex1 = nextIndex1 < 0 ? Infinity : nextIndex1;
nextIndex2 = nextIndex2 < 0 ? Infinity : nextIndex2;
if (nextIndex1 !== Infinity || nextIndex2 !== Infinity) {
result[result.length - 1].length === 0 || result.push([]);
nextIndex1 > nextIndex2 ? loop(i, nextIndex2) : loop(nextIndex1, j)
}
}
loop(0, 0);
const finalresult= result.filter(array=>array.length>1)
return finalresult;
}
这是我的方法,如果有人有其他方法,请随时分享
我有两个数组,它们都有唯一的值,我想比较它们,以便我得到一个包含连续
的所有值的列表const array1 = [1a,4a,3h,78h,5b,6b,7h]
const array2 = [3h,1a,4a,5b,6b,7h]
在这种情况下,我想比较任意数量的连续匹配值 我想要一个所有对的列表或它们具有的任意数量的连续匹配的唯一值,然后给我一个这样的列表
const array3 =[[1a,4a],[5b,6b,7h]]
解决此问题的最佳方法是什么?
我能想到的唯一解决方案是(应该有很多更好的),首先创建所有可能的子数组: 例如: const array1 = [1a,4a,3h,78h,5b,6b,7h] const array2 = [3h,1a,4a,5b,6b,7h]
const 子数组 = [[1a,4a],[3h],[5b,6b,7h]]
一旦你有了子数组,你就可以将它们映射到一个新数组,其中它们在任一数组中相对于子数组的最大位置:
const maxLocation = [[1,2][2][4,5,6]]; 现在你需要找到最长的序列=> [[1,2][4,5,6]]
fetchValues = (array1, array2) => {
let result = [[]];
let loop = (i, j) => {
if (i >= array1.length || j >= array2.length) {
return;
}
if (array1[i] == array2[j]) {
result[result.length - 1].push(array1[i]);
loop(++i, ++j);
return;
}
let nextIndex1 = array1.indexOf(array2[j], i);
let nextIndex2 = array2.indexOf(array1[i], j);
nextIndex1 = nextIndex1 < 0 ? Infinity : nextIndex1;
nextIndex2 = nextIndex2 < 0 ? Infinity : nextIndex2;
if (nextIndex1 !== Infinity || nextIndex2 !== Infinity) {
result[result.length - 1].length === 0 || result.push([]);
nextIndex1 > nextIndex2 ? loop(i, nextIndex2) : loop(nextIndex1, j)
}
}
loop(0, 0);
const finalresult= result.filter(array=>array.length>1)
return finalresult;
}
这是我的方法,如果有人有其他方法,请随时分享