如何在JavaScript中返回移除所有真值的新数组?
只保留数组中的假值(移除所有真值)
最简正确实现
JavaScript里的假值只有固定6种:false、0、""(空字符串)、null、undefined、NaN,其余全是真值。要保留假值,直接用filter方法过滤即可:
const keepFalsy = (arr) => arr.filter(item => !item);
或者更直观的写法:
function keepFalsy(arr) { return arr.filter(item => Boolean(item) === false); }
测试示例:
输入:[0, false, "", null, undefined, NaN, 1, "hello", {}, [], Infinity]
输出:[0, false, "", null, undefined, NaN]
你的代码存在的问题
- 手动枚举真值完全不可行:真值的范围几乎是无限的(任意非空对象、非零数字、非空字符串、
Infinity、[]空数组等全是真值),你不可能把所有真值都列出来,这种方式必然遗漏大量情况。 - 对象比较逻辑错误:
arr[i] == {}永远返回false——对象是引用类型,只有两个对象指向同一内存地址时才相等,你这里是拿数组元素和新创建的空对象比较,永远不匹配,这个条件等于无效。 - 判断逻辑覆盖不全:你只列举了少量真值(比如
5、"hello"),像1、[]、{a:1}这类真值根本没被包含在判断条件里,所以不会被移除,最终数组里还会残留这些真值,导致结果不符合预期。
内容的提问来源于stack exchange,提问作者la10nay
相关产品推荐
相关产品推荐

