Javascript 使用LODASH比较2个数组以查找缺少的信息
我有2个API请求,返回2个数组(每个API请求的结果是1个数组),其中有1个公共值,即时间戳 我希望比较这两个数组,并使用LODASH查找其中缺少哪些数组项(在两个不同的数组中获得差异) 对于eg,这里有两组数组Javascript 使用LODASH比较2个数组以查找缺少的信息,javascript,arrays,ecmascript-6,lodash,Javascript,Arrays,Ecmascript 6,Lodash,我有2个API请求,返回2个数组(每个API请求的结果是1个数组),其中有1个公共值,即时间戳 我希望比较这两个数组,并使用LODASH查找其中缺少哪些数组项(在两个不同的数组中获得差异) 对于eg,这里有两组数组 array1 = [ [ 1564482000000, 30.5 ], [ 1564482300000, null ], [ 1564482000020, 30.5
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
]
预期结果
我希望得到两个不同数组中缺少值的结果,所以
diff_array2 = [
1564482000020,
30.5
]
diff_array1= [
1564482000010,
10.5
]
我在Lodash中尝试了XORBY
,它给出了combine值,因此无法找出数组1或数组2中缺少哪个项,因为XOR的结果数组是1数组。项目可能存在,也可能不存在
代码样本此处不含lodash
我假设示例中两个不匹配数组的索引只是巧合。下面的代码将要做的是,从我们的数组中筛选所有数组,如果我们在另一个数组中找不到数组,那么这两个数组的索引0和索引1都是相等的。如果数组可以包含长度大于2的数组,则可以只迭代元素
var array1=[[15644482000000,30.5],[156482300000,null],[15644482000020,30.5],
array2=[15644482000000,30.5],[156482300000,null],[156444820000010,10.5];
功能差异arr(arr1、arr2){
返回arr1.filter(a=>!arr2.find(v=>v[0]==a[0]&&v[1]==v[1]))
}
控制台日志(差分arr(array1,array2))
console.log(diff_arr(array2,array1))
在没有lodash的情况下解决
我假设示例中两个不匹配数组的索引只是巧合。下面的代码将要做的是,从我们的数组中筛选所有数组,如果我们在另一个数组中找不到数组,那么这两个数组的索引0和索引1都是相等的。如果数组可以包含长度大于2的数组,则可以只迭代元素
var array1=[[15644482000000,30.5],[156482300000,null],[15644482000020,30.5],
array2=[15644482000000,30.5],[156482300000,null],[156444820000010,10.5];
功能差异arr(arr1、arr2){
返回arr1.filter(a=>!arr2.find(v=>v[0]==a[0]&&v[1]==v[1]))
}
控制台日志(差分arr(array1,array2))
log(diff_arr(array2,array1))
您可以使用传递项的索引作为迭代对象进行比较:
const diff_array2 = _.differenceBy(array1, array2, 0);
const diff_array1 = _.differenceBy(array2, array1, 0);
您可以将要用于比较的项的索引作为迭代对象传递:
const diff_array2 = _.differenceBy(array1, array2, 0);
const diff_array1 = _.differenceBy(array2, array1, 0);