用另一个数组中的元素替换数组中的元素

时间:2019-09-27 15:43:54

标签: javascript algorithm

我需要用对象的orderID键将数组中的元素替换为另一个数组中的元素。如果该元素不在数组中,则应添加它。

我已经实现了它(下面的代码片段中的示例),并且大多数情况下都起作用。

问题是我的实现在循环内使用过滤器,这可能是大数据的性能问题。

可以在循环内不循环地实现吗?

var vehiclesResp = JsonConvert.DeserializeObject<CollectionResponse<Vehicle>>(vehiclesJson);

2 个答案:

答案 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' }]