两个对象数组javascript之间的匹配



我正在构建一个api来为商店添加订单,在函数中,我接收身份属性(clientId…(和顺序数组,如下所示:

order = [{packageId,quantity},...]

然后我从DB获得包裹的价格,并获得最新价格:

packagePrice= [{packageId,unitPrice}, ...(all the packages that are needed)]

我的问题是,我如何重建order阵列,使每个包与其价格匹配,如下所示:

order=[{packageId, quantity, UnitPrice}, ...( all other packages)]

谢谢

只需将unitPrice添加到现有的order阵列中即可:

order.forEach(
v1 => v1.unitPrice = packagePrice.find(
v2 => v1.packageId === v2.packageId
)?.unitPrice
);

处理这个问题的方法不止这些。从可维护性和可读性的角度来看,我将分两步来完成:

1-将封装[{packageid,price}]的数组转换为映射{packageid:price}:

这样可以更容易地在代码中使用其他代码以下是一种方法:https://stackoverflow.com/a/26265095/8541886

2-订单项目地图

您可以使用Array.map()或简单的for循环将价格添加到订单数组

以下是代码的外观:

// get the unit prices as a map
const unitPrices = packagePrice.reduce( 
(prices,pakageprice) => {
prices[pakageprice.packageId] = pakageprice.unitPrice
return prices
},
{} // initial value for unit prices
)
// add it to the order array
const ordersWithPrices = orders.map( order => {
order.unitPrice = unitPrices[order.packageId]
return order
} ) 

嵌套循环

var packageId = 1277;
var quantity = 2;
var unitPrice = 1.00
var order = [{packageId,quantity}]
var packagePrice= [{packageId,unitPrice}]
order.forEach(function(item) {
item.unitPrice = packagePrice.find(function(item2) {
return item2.packageId == item.packageId
}).unitPrice
})
console.log(order)

import { merge } from "lodash";
var object = [{ b: 2, c: 3 }];
var other = [{ b: 2, e: 5 }];
console.log(merge(object, other));

使用Lodash合并,可以将两个数组合并为一个数组。

https://codesandbox.io/s/lodash-playground-forked-rjfu80?file=/src/index.js:0-129

最新更新