繁体   English   中英

通过使用LODASH比较2个数组来寻找丢失的信息

[英]Looking to find missing information by comparing 2 arrays using LODASH

我有2个API请求,它们返回2个数组(每个API请求的结果为1个数组),这些数组具有1个公共值,即时间戳。

我正在寻找比较两个数组,并使用LODASH查找两个数组中的哪个数组项缺失(在2个不同数组中获得差异)。

所以例如这里有2组数组

array1 =  [
    [
      1564482000000,
      30.5
    ],
    [
      1564482300000,
      null
    ],
    [
      1564482000020,
      30.5
    ]
]


array2 =  [
    [
      1564482000000,
      30.5
    ],
    [
      1564482300000,
      null
    ],
    [
      1564482000010,
      10.5
    ]
]

在上述情况下,数组1具有以下值,而数组2没有

[1564482000020,30.5]

同样,数组2具有以下值,数组1没有该值

[1564482000010,10.5]

预期结果我正在寻找2个不同数组中缺少值的结果,因此

diff_array2 =     [
      1564482000020,
      30.5
    ]

diff_array1=     [
      1564482000010,
      10.5
    ]

我在Lodash中尝试了XORBY ,它给出了合并值,因此无法找出数组1或数组2中缺少哪个项目,因为XOR的结果数组是1数组。 项目可能存在或可能不存在

此处的代码示例 https://repl.it/repls/LateCorruptTypes

您可以使用differenceBy传递项目的索引以用作迭代,以进行比较:

const diff_array2 = _.differenceBy(array1, array2, 0);    

const diff_array1 = _.differenceBy(array2, array1, 0);

解决没有lodash。

我假设示例中两个不匹配数组的索引只是一个巧合。 因此,下面的代码将执行以下操作:从我们的数组中过滤掉所有数组,我们无法在另一个数组中找到一个数组,因此两者的索引0和索引1相等。 如果数组可以包含长度大于2的数组,则可以仅遍历元素。

 var array1 = [[1564482000000,30.5],[1564482300000,null],[1564482000020,30.5]], array2 = [[1564482000000,30.5],[1564482300000,null],[1564482000010,10.5]]; function diff_arr(arr1, arr2) { return arr1.filter(a => !arr2.find(v => v[0] == a[0] && v[1] == v[1])) } console.log(diff_arr(array1, array2)) console.log(diff_arr(array2, array1)) 

如果您只需要数组中的值,那么以后总是可以使用.flat()

在下面的代码段中,您还可以比较内部数组长度可变的数组:

 var array1 = [[1564482000000,30.5],[1564482300000,null],[1564482000020,30.5]], array2 = [[1564482000000,30.5],[1564482300000,null],[1564482000010,10.5]]; function diff_arr(arr1, arr2) { return arr1.filter(a => !arr2.find(e => e.every((v,i) => v == a[i]))) } console.log(diff_arr(array1, array2)) console.log(diff_arr(array2, array1)) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM