Javascript:如何使用Reduce 获取新的对象数组

标签 javascript arrays loops object

我是编码新手,所以这可能是一个简单的问题,但我无法理解。我有一系列最好的馅饼,每个馅饼都有自己的价格:

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/

相关文章:

javascript - 按特定路径/xpath下不包含 "X"的类删除div

java - 如何在Java中找到数组中元素的索引?

php - 为什么我的多维数组没有正确初始化和/或返回?

java - 在循环中添加输出/字符串

java - 当两个值相等时如何返回 ArrayList 中的 max?

R检查变量是否是一个因素

javascript - 在reactJS中动态创建的数组长度

javascript - 如何使用 Cordova FileTransfer 将文件上传到 Amazon S3?

javascript - 在 Android Chrome 中运行 JavaScript 控制台(无需电脑)

arrays - 向地址添加直接值