[英]How to add new elements to an objects-array using event listener and show it on the html page
[英]How to return the sum of objects-array properties instead of their double?
我正在制作一個費用跟蹤器的基本代碼(沒有ui,只有初始腳本),但是在嘗試console.log時出現問題,用戶記錄了總花費,我的代碼僅使每筆購買的花費翻了一番項目,所以我決定在這里尋求幫助。
編碼:
//initial code
const account = {
name: 'user',
expenses: [],
addExpense: function(description, amount) {
account.expenses.push({
description: description,
amount: amount
});
},
getAccountSummary: function() {
let expenses = account.expenses;
for (let i = 0; i < expenses.length; i++ ) {
let value = expenses[i].amount + expenses[i].amount;
console.log(value);
}
}
}
//output calls
account.addExpense('Milk', 8);
account.addExpense('Netflix', 30);
account.addExpense('Steam summer sale', 26);
account.addExpense('Coffee', 4);
console.log(account.getAccountSummary());
代碼始終在以下記錄此值:
16
60
52
8
實際上是輸入值(8、30、26、4)的兩倍。
我正在尋找的輸出是所有這些值的總和,在這種情況下:
68
希望我的問題清楚。
當您想要一個基於數組中項目的值時,您應該考慮reduce
const account = {
name: 'user',
expenses: [],
addExpense: function(description, amount) {
account.expenses.push({
description: description,
amount: amount
});
},
getAccountSummary: function() {
return account.expenses.reduce((acc,{amount}) => acc+amount,0);
}
}
在您的getAccountSummary中
采用
let value = 0;
for (let i = 0; i < expenses.length; i++ ) {
value += expenses[i].amount ;
console.log(value);
}
希望對您有幫助。
expenses[i].amount
加2倍,以expenses[i].amount
let value = expenses[i].amount + expenses[i].amount;
,這就是為什么被加倍的原因。
如果要在getAccountSummary
打印總和,則可以執行以下操作:
getAccountSummary: function() {
const expenses = account.expenses;
let value = 0
for (let i = 0; i < expenses.length; i++ ) {
value += expenses[i].amount;
}
console.log(value);
}
但是,如果您想在getAccountSummary
上返回總和,以便可以打印它(這似乎更合理),則可以這樣做:
getAccountSummary: function() {
const expenses = account.expenses;
let value = 0
for (let i = 0; i < expenses.length; i++ ) {
value += expenses[i].amount;
}
return value;
}
並且您應該能夠調用console.log(account.getAccountSummary());
您也可以使用forEach()迭代費用。
主要問題是您是直接記錄值,而不是返回它們以供以后記錄。
另外,在現代Javascript中也無需使用“ function”關鍵字。
這是我的解決方案,給出了預期的輸出。
const account = {
name: 'user',
expenses: [],
addExpense(description, amount) {
account.expenses.push({
description: description,
amount: amount
});
},
getAccountSummary() {
return account.expenses.reduce((result, expense) => result + expense.amount, 0)
}
}
//output calls
account.addExpense('Milk', 8);
account.addExpense('Netflix', 30);
account.addExpense('Steam summer sale', 26);
account.addExpense('Coffee', 4);
console.log(account.getAccountSummary()); // 68
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.