JavaScript判断数组对象中所有影片是否均获奥斯卡的函数实现求助
问题解答:实现Winners函数判断影片是否全部获奥斯卡奖
需求说明
实现名为Winners的函数,接收影片数组作为参数:
- 数组中存在至少一部
wonOscar属性为false的影片 → 返回false - 所有影片的
wonOscar属性均为true→ 返回true
原代码问题分析
你当前的代码存在逻辑错误:
function Winners(films) { return films.every(element => element === false); }
这里的element是数组中的影片对象,不是布尔值,直接和false比较永远返回false,导致函数无论输入什么都会返回false,完全不符合需求。
可正常运行的代码示例
写法一:使用every方法直接验证全部符合条件
function Winners(films) { return films.every(film => film.wonOscar === true); }
写法二:使用some方法反向验证(性能更优)
function Winners(films) { return !films.some(film => film.wonOscar === false); }
工作原理详解
写法一(every方法)
- 数组的
every()方法会遍历数组元素,只有当所有元素都满足回调条件时返回true - 回调函数
film => film.wonOscar === true检查每个影片对象的wonOscar属性是否为true - 一旦遇到任意一个
wonOscar为false的影片,every()会立即停止遍历并返回false,最终函数返回false;若全部符合则返回true
写法二(some方法取反)
- 数组的
some()方法会遍历数组元素,只要找到一个满足条件的元素就返回true - 回调函数
film => film.wonOscar === false检查是否存在未获奥斯卡的影片 - 如果存在这样的影片,
some()返回true,取反后函数返回false;如果不存在,some()返回false,取反后函数返回true - 这种写法的优势是:找到第一个不符合条件的元素就会停止遍历,无需遍历整个数组,性能更高效
示例验证
代入你提供的测试数组:
Winners([ { title: "Fake Movie1", wonOscar: true }, { title: "Fake Movie2", wonOscar: true }, { title: "Fake Movie3", wonOscar: false }, { title: "Fake Movie4", wonOscar: true } ]);
两种写法都会返回false,符合预期。
内容的提问来源于stack exchange,提问作者NatalieCoder
相关产品推荐
相关产品推荐

