我下面有以下对象。它包含一个对象数组。每个对象都是一个 super 英雄,其中包含有关 super 英雄的详细信息。
const superheroes = [
{
name: 'Bruce Wayne',
alias: 'Batman',
powerLevel: 50,
universe: 'DC Comics',
race: 'Human',
},
{
name: 'Wade Wilson',
alias: 'Deadpool',
powerLevel: 90,
universe: 'Marvel Comics',
race: 'Mutant',
},
{
name: 'Peter Parker',
alias: 'Spiderman',
powerLevel: 70,
universe: 'Marvel Comics',
race: 'Human',
},
{
name: 'Kristin Wells',
alias: 'Superwoman',
powerLevel: 99,
universe: 'DC Comics',
race: 'Kryptonian',
},
{
name: 'Barry Allen',
alias: 'The Flash',
powerLevel: 80,
universe: 'DC Comics',
race: 'Human',
},
{
name: 'Diana Prince',
alias: 'Wonder Woman',
powerLevel: 90,
universe: 'DC Comics',
race: 'Human',
},
{
name: 'Ororo Munroe',
alias: 'Storm',
powerLevel: 85,
universe: 'Marvel Comics',
race: 'Mutant',
},
{
name: 'Helen Parr',
alias: 'Elastigirl',
powerLevel: 70,
universe: 'Dark Horse Comics',
race: 'Human',
},
];
我想找到所有 super 英雄的平均力量水平。
我尝试了下面的代码:
function powerLevelAverage(obj){
let sum = 0;
let objCount = 0;
return obj.reduce((accumulator, element) => {
objCount += 1;
console.log(objCount)
sum = accumulator + element.powerLevel
return sum;
}, 0)
return Math.round(sum/objCount);
}
const averagePowerLevel = powerLevelAverage(superheroes);
averagePowerLevel
该代码似乎返回 634 的总和,但不返回平均值。我究竟做错了什么?
注意:我想使用reduce修改函数来解决这个问题。
最佳答案
存在三个错误:
- 代码中有两个
return
语句。因此代码不会到达第二个获得平均值的代码。 - 您使用
reduce()
的方式是错误的。您没有在任何地方使用累加器。您正在使用reduce()
,例如forEach()
- 您不需要计算
reduce()
中的每个对象,您已经拥有obj.length
形式的数组的length
更简洁的代码就可以了。
function powerLevelAverage(obj){
return Math.round(obj.reduce((ac,a) => ac + a.powerLevel,0)/obj.length)
}
工作片段:
const superheroes = [ { name: 'Bruce Wayne', alias: 'Batman', powerLevel: 50, universe: 'DC Comics', race: 'Human', }, { name: 'Wade Wilson', alias: 'Deadpool', powerLevel: 90, universe: 'Marvel Comics', race: 'Mutant', }, { name: 'Peter Parker', alias: 'Spiderman', powerLevel: 70, universe: 'Marvel Comics', race: 'Human', }, { name: 'Kristin Wells', alias: 'Superwoman', powerLevel: 99, universe: 'DC Comics', race: 'Kryptonian', }, { name: 'Barry Allen', alias: 'The Flash', powerLevel: 80, universe: 'DC Comics', race: 'Human', }, { name: 'Diana Prince', alias: 'Wonder Woman', powerLevel: 90, universe: 'DC Comics', race: 'Human', }, { name: 'Ororo Munroe', alias: 'Storm', powerLevel: 85, universe: 'Marvel Comics', race: 'Mutant', }, { name: 'Helen Parr', alias: 'Elastigirl', powerLevel: 70, universe: 'Dark Horse Comics', race: 'Human', }, ];
function powerLevelAverage(obj){
return Math.round(obj.reduce((ac,a) => ac + a.powerLevel,0)/obj.length)
}
console.log(powerLevelAverage(superheroes))
关于JavaScript:循环遍历对象数组并使用Reduce函数查找特定键的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56398517/