【发布时间】:2018-12-07 00:02:36
【问题描述】:
我是编码新手,所以这可能是一个简单的问题,但我无法理解。我有一系列最好的馅饼,每个都有自己的价格:
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}]
我做错了什么?
【问题讨论】:
-
const total = 0;呃,const,你确定?const total = total + 2.5;也是无效的语法,我认为代码不应该首先运行? (另外,当第一个if条件也满足时,您可能想要return totalPrice) -
在
const total = total + 2.5;中,您同时声明和读取变量。请注意,外部const total = 0;在这里被遮盖了。你真的是想const-声明这个吗?else if的}在哪里?您确定在这两种情况下都返回一个值吗? -
哦,好的,所以我修复了 const 总数,并将 return 添加到第一个 if 语句。但是,它仍然没有改变总数,还有其他想法吗?
-
如果您要更改该变量,则不应使用
const。并让total在reduce操作之外定义。这样,在一次reduce操作迭代后,total不会被初始化。 -
感谢CertainPerformance、Xufox 和@Meet Zaveri。我现在明白了如果我要更改变量,则不使用 const 是什么意思。当我将其更改为 var
标签: javascript arrays loops object