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
相关产品推荐
相关产品推荐

