[英]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数组。 项目可能存在或可能不存在
您可以使用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.