JS ES6/ES10-通过另一个对象数组有条件地更改对象数组中的属性



我有一个订单列表,需要使用另一个对象数组修改:

const orders = [
{
"shippingCost": 4.23,
"orderStatus": "PAID",
"sid": "2AB8FDC19B0E77F738171D8E396BCEE0",
"creationDate": "2021-09-13T04:17:23",
"orderId": "12-07303-03670",
"itemCount": 2,
"multiOrders": 2,
"rowNumber": 1,
"merged": 1
},
{
"shippingCost": 4.29
"orderStatus": "PAID",
"sid": "2AB8FDC19B0E77F738171D8E396BCEE0",
"creationDate": "2021-08-24T16:02:12",
"orderId": "08-07513-82414",
"itemCount": 2,
"multiOrders": 2,
"rowNumber": 2,
"merged": 1
},
{
"shippingCost": 6.22,
"orderStatus": "PAID",
"sid": "A63E0D42132D3245E8A3B0AAF00B6C3B",
"creationDate": "2021-07-18T17:50:31",
"orderId": "16-07301-37416",
"itemCount": 4,
"multiOrders": 4,
"rowNumber": 1,
"merged": 1
}
];
const changed=[
{
"sid": "D2BD1A6E9DE4C81A3D58138FE35958A0",
"orderId": "12-07303-03670",
},
{
"sid": "7F9DF7D3D1735BB39CED4866E28FF9F1",
"orderId": "16-07301-37416",
}
];

我目前正在使用这个算法来更改一些值,但我(相当(确信有更好的方法可以做到:请提出一个更好或更优雅的方法吗?

changed.forEach(i=> {
let idx=orders.findIndex(o=>o.orderId==i.orderId)
newData={"sid":i.sid,"rowNumber":1,"itemCount":1,"merged":0}
Object.assign(this.orders[idx],newData)
console.log(orders[idx])
})

感谢

您的代码还可以;每次都必须查找订单ID

如果输入数组很短,或者更改在原始数组的早期,那么您的代码比下面的示例更快-如果不是,则不是:

const orders = [ { "shippingCost": 4.23, "orderStatus": "PAID", "sid": "2AB8FDC19B0E77F738171D8E396BCEE0", "creationDate": "2021-09-13T04:17:23", "orderId": "12-07303-03670", "itemCount": 2, "multiOrders": 2, "rowNumber": 1, "merged": 1 }, { "shippingCost": 4.29, "orderStatus": "PAID", "sid": "2AB8FDC19B0E77F738171D8E396BCEE0", "creationDate": "2021-08-24T16:02:12", "orderId": "08-07513-82414", "itemCount": 2, "multiOrders": 2, "rowNumber": 2, "merged": 1 }, { "shippingCost": 6.22, "orderStatus": "PAID", "sid": "A63E0D42132D3245E8A3B0AAF00B6C3B", "creationDate": "2021-07-18T17:50:31", "orderId": "16-07301-37416", "itemCount": 4, "multiOrders": 4, "rowNumber": 1, "merged": 1 } ]; const changed=[ { "sid": "D2BD1A6E9DE4C81A3D58138FE35958A0", "orderId": "12-07303-03670", }, { "sid": "7F9DF7D3D1735BB39CED4866E28FF9F1", "orderId": "16-07301-37416", } ];
orders.forEach(item => {
const change = changed.find(change => item.orderId === change.orderId); 
if (change)  Object.assign(item, { sid:change.sid, rowNumber : 1, itemCount : 1, merged : 0})
})

console.log(orders)

最新更新