我是编码新手,所以这可能是一个简单的问题,但我无法理解。我有一系列最好的馅饼,每个馅饼都有自己的价格:
pieArr = [blueberry, strawberry, pumpkin, apple]
我想创建一个对象数组,根据馅饼的价格显示购物车的总数,堆栈溢出上的某人建议我使用reduce。
这是我到目前为止所拥有的:
var total = 0;
const totalArr = pieArr.reduce((totalPrice, pie) => {
if ( pie === "blueberry") {
total += 2.5;
totalPrice.push({["cartTotal"]:total});
return totalPrice;
}
else if (pie === "apple") {
total += 2;
totalPrice.push({["cartTotal"]:total});
return totalPrice;
},
[])};
我想要的最终结果是一个新的对象数组,它不断添加新的总计:
[{cartTotal:2.5},{cartTotal:4.5}]
新的对象数组被创建,但总数没有相加,所以最终两次总数都为 0:
[{cartTotal: 0},{cartTotal: 0}]
我做错了什么?
最佳答案
执行此操作的一个好方法是进行价格查找,例如:
let piePrices = {
blueberry: 2.25,
strawberry: 1.5,
pumpkin: 3,
apple: 2
}
然后你可以在 map()
中使用它(如果你只是从数组创建一个数组,这比 reduce()
更好),而不需要所有 if/else
噪音:
let piePrices = {
blueberry: 2.25,
strawberry: 1.5,
pumpkin: 3,
apple: 2
}
let pieArr = ['blueberry', 'strawberry', 'pumpkin', 'apple']
let total = 0
let totalPrice = pieArr.map(pie => ({cartTotal: total += piePrices[pie]}))
console.log(totalPrice)
关于Javascript:如何使用Reduce 获取新的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073833/