比较typescript中对象数组的最有效方法?



我正在接收来自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;
}

最新更新