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

为何检查extraUsers对象数组非空字符串的函数返回false而非预期true?

问题分析:为什么检查非空字符串的函数返回false

问题场景

需要验证用户输入信息(包括extraUsers数组中的用户)的所有字符串均不为空,示例数据如下:

const userInfo = {
  firstName: 'Jimmy',
  lastName: 'Hendrix',
  extraUsers: [{
    firstName: 'Bob',
    lastName: 'Michael'
  }],
};

编写了如下检查函数,预期返回true(因为所有字符串非空),但实际输出false:

function checkForEmptyStrings() {
  return (
    userInfo.extraUsers.every((extraUser) => {
      Object.values(extraUser).every((x) => x !== '')
    })
  );
}

console.log(checkForEmptyStrings()) // 输出false

单独打印内层Object.values(extraUser).every((x) => x !== '')结果为true。

原因

问题出在箭头函数的返回值处理上:

  • 当箭头函数使用大括号{}包裹代码块时,必须显式使用return语句返回值,否则默认返回undefined。
  • 外层every的回调函数中,内层every的结果没有被返回,导致每个extraUser对应的回调返回undefined。
  • 而every方法会把undefined判定为false,因此整个userInfo.extraUsers.every(...)最终返回false。

修复方案

有两种方式可以解决:

方式1:去掉内层箭头函数的大括号,隐式返回结果

function checkForEmptyStrings() {
  return (
    userInfo.extraUsers.every((extraUser) => 
      Object.values(extraUser).every((x) => x !== '')
    )
  );
}

方式2:显式添加return语句

function checkForEmptyStrings() {
  return (
    userInfo.extraUsers.every((extraUser) => {
      return Object.values(extraUser).every((x) => x !== '')
    })
  );
}

修改后再执行,函数会正确返回true。

内容的提问来源于stack exchange,提问作者Max S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:35:19