const products = [{
id: 5,
productName: "Logitech Mouse",
unitprice: 35
},
{
id: 6,
productName: "Logitech Keyboard",
unitprice: 40
}
];
const cart = [{
id: 101,
userId: 3,
productId: 5,
quantity: 2
}];
totals = cart.reduce((r, {
productId: id,
quantity
}) =>
(r[id] = (r[id] || 0) + quantity, r), {}),
result = products.map(({
id,
productName,
unitprice
}) => ({
productName,
unitprice,
quantity: totals[id]
}));
console.log(result)
当前,它打印两行而不是一行。因为cart
中只有一行,所以不应打印第二行。我如何所谓的内部联接仅返回一个购物车ID为101的记录?
如果您要购物车中所有物品的总价,则需要:
const products = [{
id: 5,
productName: "Logitech Mouse",
unitprice: 35
}, {
id: 6,
productName: "Logitech Keyboard",
unitprice: 40
}];
const cart = [{
id: 101,
userId: 3,
productId: 5,
quantity: 2
}];
let total = cart.reduce((subtotal, item) => {
let product = products.find(p => p.id === item.productId);
return subtotal + product.unitprice * item.quantity;
}, 0);
console.log(total);
简短版:
let t = cart.reduce((s, i) => s + products.find(p => p.id === i.productId).unitprice * i.quantity, 0);
我建议使用这样的map
功能
const products = [{
id: 5,
productName: "Logitech Mouse",
unitprice: 35
},
{
id: 6,
productName: "Logitech Keyboard",
unitprice: 40
}
];
const cart = [{
id: 101,
userId: 3,
productId: 5,
quantity: 2
}];
result = cart.map(item => {
const product = products.find(product => item.productId === product.id);
return { id: item.id, quantity: item.quantity, productName: product.productName, unitprice: product.unitprice }
});
console.log(result);