![](/img/trans.png)
[英]How to use javascript reduce function for objects in an array to get string values
[英]Javascript: How to use Reduce to get New Array of Objects
我是编码的新手,所以这可能是一个简单的问题,但我无法理解。 我有一系列所有最好的馅饼,每个都有自己的价格:
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()
如果您只是从一个数组中创建一个数组,它比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)
const total = 0; let pieArr = ['blueberry', 'strawberry', 'pumpkin', 'apple'] const totalArr = pieArr.reduce((totalPrice, pie) => { let foundPie = totalPrice.find(x => x.name === pie) || {name: pie, total: 0}; if ( pie === "blueberry") { foundPie.total += 2.5; } else if (pie === "apple") { foundPie.total += 2; } if(!totalPrice.some(x=>x.name === pie)){ totalPrice.push(foundPie) } return totalPrice; }, []); console.log(totalArr)
我建议添加另一个属性name
以使图片更清晰。 在我们reducing
,从累积的totalPrice
数组中找到饼,然后进行求和,并检查是否将元素推送到累积的数组中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.