我正在接收来自2个不同api的订单对象数组,我想比较两个数组是否包含相同数量的订单和这些订单的值也相同。以下是订单的样子
class Order {
id: number;
coupon: Coupon;
customerId: number;
delivered: boolean;
orderDate: string;
}
output1: Order[];
output2: Order[];
如何在不使用嵌套循环和逐个比较所有字段的情况下比较output1和output。
注意:
我不想使用lodash.
JSON.stringfy()可以是一个选项,但我担心它可能有排序问题。
创建一个函数,将订单序列化为字符串(可能使用JSON)。Stringify或类似https://www.npmjs.com/package/json-stable-stringify),然后比较这些集合。
function key(o: Order) {
// Or maybe return JSON.stringify(o);
return `${o.id}-${o.customerId}-${o.orderDate}`;
}
function sameOrders(a: Order[], b: Order[]) {
const keys = new Set(a.map(key);
const aHasB = b.every(order => keys.delete(key(order)));
return aHasB && keys.size === 0;
}