我想获得某个阵列中所有“戏剧”电影的平均收视率。 所以我的计划是 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))
答案 0 :(得分:5)
在Array#reduce
中将initial value设置为0
并仅解析下一个值(currentValue.rate
),否则,在第二次迭代开始,accumulator.rate
将是{{3 }},返回值为undefined
。
const total = drama.reduce((accumulator, currentValue) => accumulator + parseFloat(currentValue.rate), 0)