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

JS函数中逻辑或不生效,如何修改代码同时校验空串、null和undefined

条件失效的原因

你组合判断时错误使用了或运算符(||):对于任意属性值,三个!==判断永远至少有两个成立,比如值是空字符串时,obj[key] !== null和obj[key] !== undefined都为真,整个判断条件结果就为真,空字符串自然不会被过滤,同理null、undefined也过滤不掉。

按照逻辑规则,要同时排除空字符串、null、undefined三个值,有两种等价的正确写法:

  • 写法1:先匹配要排除的三种情况再整体取反:!(obj[key] === '' || obj[key] === null || obj[key] === undefined)
  • 写法2:三个不等于判断用**与运算符(&&)**连接:obj[key] !== '' && obj[key] !== null && obj[key] !== undefined

修正后的代码

把原代码里的else if判断条件替换为上面任意一种即可,示例:

const removeEmpty = (obj) => {
  let newObj = {};
  Object.keys(obj).forEach((key) => {
    if (obj[key] === Object(obj[key])) newObj[key] = removeEmpty(obj[key]);
    // 这里用第二种写法,逻辑更直观
    else if (obj[key] !== '' && obj[key] !== null && obj[key] !== undefined) newObj[key] = obj[key];
  });
  return newObj;
}

用你提供的测试用例运行,可正常递归删除所有值为空字符串、null、undefined的属性,嵌套对象、数组内的对应属性也会被正确处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:45:01