【发布时间】:2019-09-27 15:43:54
【问题描述】:
我需要通过对象的 orderID 键将数组中的元素替换为另一个数组中的元素。如果元素不在数组中,则应该添加它。
我已经实现了它(下面的代码 sn-p 中的示例)并且它大部分都可以工作。
问题是我的实现在循环中使用了过滤器,这可能是大数据的性能问题。
可以不循环内循环实现吗?
let storageOrders = [
{orderID:1, data:'data1'},
{orderID:2, data:'data2'},
{orderID:3, data:'data3'},
{orderID:4, data:'data4'},
];
let summaryOrders = [
{orderID:2, data:'data2_new'},
{orderID:3, data:'data3_new'},
{orderID:5, data:'data5'},
];
summaryOrders.forEach((order) => {
storageOrders = storageOrders.filter(storageOrder => storageOrder.orderID !== order.orderID);
storageOrders.push(order);
});
console.log(storageOrders);
【问题讨论】:
-
@Dznitry 您可以尝试对两个数组进行排序。即使对于大型数组,它也只有您现在执行的 nLog n 与 n^2。排序后,查看summaryOrders 并检查storageOrders 中的下一个元素。简单的。总操作将是:2nlog(n)+n。假设数组大小相似。如果没有,我让你做数学...... :-)
标签: javascript algorithm