Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用另一个数组中的元素替换数组中的元素_Javascript_Algorithm - Fatal编程技术网

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

Javascript 用另一个数组中的元素替换数组中的元素,javascript,algorithm,Javascript,Algorithm,我需要用另一个数组中的元素替换数组中的元素,并使用对象的orderID键。如果元素不在数组中,则应添加它 我已经实现了它(下面代码片段中的示例),并且它基本上是有效的 问题是我的实现在循环中使用了过滤器,这可能是大数据的性能问题 它是否可以在没有内部循环的情况下实现 让storageOrders=[ {orderID:1,数据:'data1'}, {orderID:2,数据:'data2'}, {orderID:3,数据:'data3'}, {orderID:4,数据:'data4'}, ];

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

我已经实现了它(下面代码片段中的示例),并且它基本上是有效的

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

它是否可以在没有内部循环的情况下实现

让storageOrders=[
{orderID:1,数据:'data1'},
{orderID:2,数据:'data2'},
{orderID:3,数据:'data3'},
{orderID:4,数据:'data4'},
];
设summaryOrders=[
{orderID:2,数据:'data2_new'},
{orderID:3,数据:'data3_new'},
{orderID:5,数据:'data5'},
];
汇总订单。forEach((订单)=>{
storageOrders=storageOrders.filter(storageOrder=>storageOrder.orderID!==order.orderID);
storageOrders.push(订单);
});

console.log(storageOrders)
您可以使用
storageOrders
summaryOrders
创建从
orderID
到对象的映射(一个接一个,以便
summaryOrders
中的值优先于已经存在的id)。然后可以使用
对象重新创建最终数组。值

让storageOrders=[
{orderID:1,数据:'data1'},
{orderID:2,数据:'data2'},
{orderID:3,数据:'data3'},
{orderID:4,数据:'data4'},
];
设summaryOrders=[
{orderID:2,数据:'data2_new'},
{orderID:3,数据:'data3_new'},
{orderID:5,数据:'data5'},
];
storageOrders=Object.Value([…storageOrders,…summaryOrders])。reduce((a,c)=>{
a[c.orderID]=c;
返回a;
}, {}));

console.log(storageOrders)您可以从现有订单创建一个对象,然后在新订单/更新订单之间循环以更新现有订单对象。这可能是一种更好的存储数据的方法,但是,如果需要,可以将更新的对象转换回对象列表

让storageOrders=[{orderID:1,数据:'data1'},{orderID:2,数据:'data2'},{orderID:3,数据:'data3'},{orderID:4,数据:'data4'}];
让summaryOrders=[{orderID:2,数据:'data2_new'},{orderID:3,数据:'data3_new'},{orderID:5,数据:'data5'}];
让订单=存储订单。减少((acc,obj)=>{
acc[obj.orderID]=obj.data;
返回acc;
}, {});
for(求和顺序){
orders[order.orderID]=order.data;
}
storageOrders=Object.entries(orders.map)([id,data])=>{
返回{orderID:id,data:data};
});
console.log(storageOrders);

//[{orderID:1,数据:'data1'},{orderID:2,数据:'data2_new'},{orderID:3,数据:'data3_new'},{orderID:4,数据:'data4'},{orderID:5,数据:'data5'}]
@Dznitry您可以尝试对两个数组进行排序。即使对于大型阵列,您现在也只能执行nLog n vs.n^2。排序后,检查summaryOrders并检查storageOrders中的下一个元素。简单。总操作数为:2nlog(n)+n。假设数组大小相似。如果没有,我就让你来做数学题…:-)