我试图返回所有事务的总和,但程序没有返回的总和
问题
定义一个函数totalTransactions,它接受一个称为transactions的对象数组。
totalTransactions应返回在所有交易中花费的总金额。
我的代码
function totalTransactions(transactions) {
let sum = 0
for (key in transactions) {
transactions[key] += sum;
}
return sum;
}
给定信息这是一个嵌套的数据结构。类似于2D数组,我们可以使用括号和点符号的组合来访问嵌套键值对
例如,为了访问第一个名称和金额值,我们可以使用索引0(对于第一个列表项(,然后是各个键值:
给定示例代码
let transactions = [
{
name: "Tons of glitter",
amount: 70
},
{
name: "Porcelain Pink Flamingos",
amount: 92
},
{
name: "Chandelier replacement",
amount: 10000,
},
{
name: "Dinner at TGIF x6",
amount: 350
}
];
lastFridayNight(transactions) // => 10512
由于您正在计算聚合,reduce在这里是您的朋友。
从等于数字0的sum
开始。在每个中间步骤,将当前事务的amount
添加到聚合中。
let transactions = [
{
name: "Tons of glitter",
amount: 70
},
{
name: "Porcelain Pink Flamingos",
amount: 92
},
{
name: "Chandelier replacement",
amount: 10000,
},
{
name: "Dinner at TGIF x6",
amount: 350
}
];
function totalTransactions(transactions) {
return transactions.reduce((sum, tx) => sum + tx.amount, 0);
}
console.log(totalTransactions(transactions));
编辑
我喜欢上面片段的工作方式,如果这是我的项目,我可能会走这条路。然而,如果这里的目标是以最简单的方式修复代码,那么这里有一个替代解决方案。
function totalTransactions(transactions) {
let sum = 0
for (const tx of transactions) {
sum += tx.amount;
}
return sum;
}
这里有两个主要变化:
- 将循环从
for .. in
更改为for .. of
会迭代事务,而不是数组中的键 - 这条线
transactions[key] += sum;
没有多大意义。您正在将sum
的值(在本例中始终为0
(添加到对象中。我的测试表明,它将两个值强制转换为字符串,并将它们连接起来。这绝对不是你想要的!相反,您希望从每个事务中获得值amount
,并将其添加到sum
中
为了帮助理解,您的数据是一个对象数组。因此,我们可以使用索引表示法来遍历每个对象,但随后我们使用点表示法来访问该对象的属性的值。
"对于每个";是Array对象的一个函数,它是对"的一个很好的简写;对于(设i=0,i++,i<t.length({t[i]在这里执行代码}";
您可以通过以下几种方式访问对象的属性:https://dmitripavlutin.com/access-object-properties-javascript/
因此,我们正在迭代每个";项目";并访问"amount"属性,将其添加到函数范围(通过let(的变量"中;sum";然后返回该值。
function totalTransactions(t) {
let sum = 0;
t.forEach(item => {
sum += item.amount;
})
return sum;
}
访问属性的另一种方法,类似于数组的表示法:
function totalTransactions(t) {
let sum = 0;
t.forEach(item => {
sum += item['amount'];
})
return sum;
}
如果在数组上使用for..in
,请尝试for..of
。我可以看到一个将用作totalTransactions参数的示例数组吗?此外,我相信你应该像sum += transactions[key];
这样切换重新分配,这样sum就被重新分配了,而不是对象。