You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现判断数组中恰好一个元素经回调函数返回true的功能?

修正one函数的实现

你的当前代码存在两个核心问题:

  • 仅找到第一个满足条件的元素就直接返回true,无法判断是否恰好只有一个元素符合要求(比如测试用例3会错误返回true)
  • 调用回调函数时没有传入元素的索引,导致依赖索引的回调逻辑无法正常工作(比如测试用例6)

以下是正确的实现:

function one(array, cb) {
  let count = 0;
  for (let i = 0; i < array.length; i++) {
    // 传入元素和索引给回调函数
    if (cb(array[i], i)) {
      count++;
      // 提前终止:如果数量超过1,没必要继续遍历
      if (count > 1) {
        return false;
      }
    }
  }
  // 遍历结束后判断是否恰好有一个符合条件的元素
  return count === 1;
}

// 测试用例验证
let result1 = one(['x', 'y', 'z'], function(el) {
  return el === 'a';
});
console.log("1 F:" + result1); // false

let result2 = one(['x', 'a', 'y', 'z'], function(el) {
  return el === 'a';
});
console.log("2 T:" + result2); // true

let result3 = one(['x', 'a', 'y', 'a', 'z'], function(el) {
  return el === 'a';
});
console.log("3 F:" + result3); // false

let result4 = one(['apple', 'dog'], function(el) {
  return el.length > 3;
});
console.log("4 T:" + result4); // true

let result5 = one(['apple', 'dog', 'pear'], function(el) {
  return el.length > 3;
});
console.log("5 F:" + result5); // false

let result6 = one(['apple', 'dog', 'food', 'cat'], function(el, idx) {
  return el.length === idx;
});
console.log("6 T:" + result6); // true

实现说明:

  1. 用count变量统计符合回调条件的元素数量
  2. 遍历数组时,给回调函数传入元素和索引两个参数
  3. 当count超过1时直接返回false,提前终止遍历提升性能
  4. 遍历完成后,判断count是否严格等于1,返回对应的布尔值

内容的提问来源于stack exchange,提问作者UpsetSheepHerder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:42:41