我需要用对象的orderID键将数组中的元素替换为另一个数组中的元素。如果该元素不在数组中,则应添加它。
我已经实现了它(下面的代码片段中的示例),并且大多数情况下都起作用。
问题是我的实现在循环内使用过滤器,这可能是大数据的性能问题。
可以在循环内不循环地实现吗?
var vehiclesResp = JsonConvert.DeserializeObject<CollectionResponse<Vehicle>>(vehiclesJson);
答案 0 :(得分:2)
您可以同时使用{{1}和orderID
创建从storageOrders
到对象的映射(一个接一个,以便summaryOrders
的值优先于已经存在的id那里)。然后,您可以使用summaryOrders
重新创建最终数组:
Object.values
答案 1 :(得分:1)
您可以根据现有订单创建对象,然后循环浏览新的/更新的订单以更新现有订单对象。这可能是一种更好的方式来存储数据,但是,如果需要,可以将更新的对象转换回对象列表。
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' }];
let orders = storageOrders.reduce((acc, obj) => {
acc[obj.orderID] = obj.data;
return acc;
}, {});
for (let order of summaryOrders) {
orders[order.orderID] = order.data;
}
storageOrders = Object.entries(orders).map(([id, data]) => {
return { orderID: id, data: data };
});
console.log(storageOrders);
// [{ orderID: 1, data: 'data1' }, { orderID: 2, data: 'data2_new' }, { orderID: 3, data: 'data3_new' }, { orderID: 4, data: 'data4' }, { orderID: 5, data: 'data5' }]