我想获得某个阵列中所有“戏剧”电影的平均收视率。所以我的计划是1.)做一些“过滤器”功能以获取包含所有“戏剧”电影的数组2.)做“减少”功能,该函数累加所有等级并将返回值除以“戏剧”的长度“数组。
但是第一步是有效的,但是当我尝试使用“ reduce”函数时,每当我的“ Drama”数组包含两个以上元素时,它将返回NaN。如果我用2个元素对其进行测试,那么它将起作用。我真的很困惑,由于某些原因,第三个元素的“比率”不再被视为数字值。
任何帮助表示赞赏,在此先感谢!
var movies = [{
title: 'Fargo',
year: '1994',
director: 'Frank Darabont',
duration: '2h 52min',
genre: ['Drama'],
rate: '7.78'
},
{
title: 'Terminator',
year: '1994',
director: 'Frank Darabont',
duration: '2h 52min',
genre: ['Drama', 'Crime'],
rate: '9.36'
},
{
title: 'The Shawshank Redemption',
year: '1994',
director: 'Frank Darabont',
duration: '2h 52min',
genre: ['Drama'],
rate: '8.5'
},
{
title: 'Titanic',
year: '1994',
director: 'Frank Darabont',
duration: '2h 52min',
genre: ['Romance'],
rate: '2.5'
}
]
function dramaMoviesRate(arr) {
let drama = (arr.filter(movie => movie.genre.includes('Drama')))
if (drama.length >= 2) {
const total = drama.reduce((accumulator, currentValue) => parseFloat(accumulator.rate) + parseFloat(currentValue.rate))
return Math.round((total / drama.length) * 100) / 100
} else if (drama.length === 1) {
return (parseFloat(drama[0].rate))
}
}
console.log(dramaMoviesRate(movies))Run Code Online (Sandbox Code Playgroud)
在Array#reduce将初始值设置 为as 0并仅解析下一个value(currentValue.rate)的情况下,否则,在第二次迭代之后accumulator.rate将是undefined并且返回值将是NaN。
const total = drama.reduce((accumulator, currentValue) => accumulator + parseFloat(currentValue.rate), 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32 次 |
| 最近记录: |