【发布时间】:2020-09-18 19:51:20
【问题描述】:
我有两个对象数组:
\\offers
[
{DeskUID: "B11A13", Day: 06 Jun 2020}
{DeskUID: "B11A13", Day: 07 Jun 2020}
{DeskUID: "B12B34", Day: 23 Jun 2020}
]
\\reservations
[
{DeskUID: "B11A13", Day: 06 Jun 2020, Name: "Mike"}
{DeskUID: "B12B34", Day: 23 Jun 2020, Name: "Ali"}
]
我想得到一个结果,那里有可用的报价,这意味着只有没有已经预订座位的报价。
\\result
[
{DeskUID: "B11A13", Day: 07 Jun 2020}
]
How to get the difference between two arrays of objects in JavaScript
我已经在上面的链接上尝试了解决方案,但没有成功,我只是得到了一个结果数组作为两个数组中所有对象的总和。
function comparer(otherArray){
return function(current){
var reserveDay = new Date (current.Day)
return otherArray.filter(function(other){
var offerDay = new Date (other.Day)
return other.DeskUID == current.DeskUID && offerDay == reserveDay
}).length == 0;
}
}
var onlyInA = offers.filter(comparer(reservations));
var onlyInB = reservations.filter(comparer(offers));
result = onlyInA.concat(onlyInB);
【问题讨论】:
-
你的两个 Date 对象永远不会相等,因为它们是不同的对象引用,即使输入值相同
-
您可以使用 lodash 的 isEqual 进行深度对象比较:lodash.com/docs/4.17.15#isEqual
标签: javascript arrays json javascript-objects