【问题标题】:How to compare consecutive elements in two different arrays如何比较两个不同数组中的连续元素
【发布时间】:2021-09-07 14:47:05
【问题描述】:

我有两个具有唯一值的数组,我想比较它们,以便获得所有连续值的列表

const array1 = [1a,4a,3h,78h,5b,6b,7h]
const array2 = [3h,1a,4a,5b,6b,7h]

在这种情况下,我想比较任意数量的连续匹配值 我想要一个所有对或任意数量的连续匹配唯一值的列表,然后给我一个这样的列表

const array3 =[[1a,4a],[5b,6b,7h]] 

最好的方法是什么?

【问题讨论】:

  • 你能解释一下为什么预期的结果是[[1a,4a],[5b,6b]]吗?
  • 因为它们是连续的,所以在数组 1a 和 4a 中都紧随其后,而在第二个中,5b 和 6b 紧随其后,因此如果这更有意义,它们也会创建自己的数组一个
  • 他们总是成对的吗?如果[5b,6b,7b] 怎么办?这是[5b, 6b], [6b, 7b] 还是...
  • 不,它可以是任何数字,只要它们是连续的,因此它可以小到一对,大到两个阵列都可以管理。

标签: javascript arrays sorting comparison


【解决方案1】:

我能想到的唯一解决方案是(应该有很多更好的),首先创建所有可能的子数组: 例如: 常量数组1 = [1a,4a,3h,78h,5b,6b,7h] const array2 = [3h,1a,4a,5b,6b,7h]

const subArray = [[1a,4a],[3h], [5b,6b,7h]]

一旦你有了子数组,你可以将它们映射到一个新数组,它们的最大位置在任一数组中相对于子数组:

const maxLocation = [[1,2][2][4,5,6]]; 现在你需要找到最长的序列 => [[1,2][4,5,6]]

【讨论】:

  • 嘿@vaira 他的解决方案确实适用于给定的示例数组,但不适用于所有示例,例如const arr1 = ['1a', '4a', '3h', '78h', '5b', '6b', '7h'] const arr2 = ['1a', '5b', '6b', '7h'] 将输出[ [ '1a' ], [ '5b', '6b', '7h' ] ]
  • 我不确定新的答案,因为我没有足够的时间亲自测试它
【解决方案2】:
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;
}

这就是我的方法,如果有人有其他方法,请随时分享

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多