如何实现myEvery函数:用回调检查数组所有元素是否全为true
实现自定义的myEvery函数
你当前代码的问题很明确:直接把整个数组arr传给了回调cb,没有逐个遍历数组元素传入回调,而且初始逻辑也不对——默认设为false,仅当回调返回true才改成true,完全没实现“检查所有元素”的核心逻辑。
下面是正确的实现思路和代码:
let myEvery = function(arr, cb) { // 先默认所有元素都满足条件 let allPass = true; // 遍历数组的每一个元素 for (let i = 0; i < arr.length; i++) { // 把当前元素、索引、原数组传给回调(后两个参数和内置every对齐,可选但更规范) const checkResult = cb(arr[i], i, arr); // 只要有一个元素不满足,立刻修改标志位并终止循环(没必要继续检查) if (!checkResult) { allPass = false; break; } } // 返回最终检查结果 return allPass; };
逻辑说明:
- 初始设
allPass为true:因为只要没有元素不满足条件,结果就为true - 遍历数组时,每个元素都传入回调执行检查,参数和内置
Array#every保持一致 - 一旦发现某个元素不满足,直接终止循环并修改标志位,避免多余计算
- 遍历结束后返回标志位,就是所有元素是否都符合要求的结果
测试示例:
用它检查数组所有元素是否为偶数:
const isEven = num => num % 2 === 0; console.log(myEvery([2,4,6], isEven)); // 输出true console.log(myEvery([2,3,6], isEven)); // 输出false
内容的提问来源于stack exchange,提问作者Royce James Calvin
相关产品推荐
相关产品推荐

