JS入门者求助:如何用map和reduce获取数组中最长的电影标题?
获取数组中最长电影标题的错误修复与优化
错误原因
你代码里的核心问题是字符串的length是属性而非方法,你写成了name1.length()和name2.length(),加括号会把它当作函数调用,直接导致运行报错。把括号去掉,写成name1.length和name2.length就能解决这个问题。
修正后的代码
const movieReviews = [ { title : "Black Adam", score : 68, year : 2022 }, { title : "Black Panther", score : 99, year : 2018 }, { title : "SpiderMan FFH", score : 90, year : 2020 }, { title : "Avatar", score : 100, year : 2009 }, { title : "WonderWoman", score : 75, year : 2019 }, ] const longestName = movieReviews.map(m => m.title) .reduce((name1, name2) => { if(name1.length > name2.length){ return name1; } return name2; }) console.log(longestName); // 输出:Black Panther
优化方案
其实没必要先用map生成单独的标题数组,直接在reduce里处理原数组的对象,减少一次数组遍历,效率更高:
const longestName = movieReviews.reduce((longestTitle, currentMovie) => { return currentMovie.title.length > longestTitle.length ? currentMovie.title : longestTitle; }, movieReviews[0].title) // 初始值设为第一个电影的标题 console.log(longestName); // 输出:Black Panther
如果担心数组为空的情况,可以加个判断:
const longestName = movieReviews.length === 0 ? "" : movieReviews.reduce((longestTitle, currentMovie) => { return currentMovie.title.length > longestTitle.length ? currentMovie.title : longestTitle; }, movieReviews[0].title)
内容的提问来源于stack exchange,提问作者MonkeyDZoro
相关产品推荐
相关产品推荐

