Javascript reduce()仅考虑2个数组元素

Mor*_*tz 1 javascript arrays

我想获得某个阵列中所有“戏剧”电影的平均收视率。所以我的计划是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)

Pra*_*lan 5

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)