如何获取JavaScript对象指定字段中值为true的键名数组
问题解决方法
你原来的写法问题在于filter是数组的原生方法,不能直接在普通对象上调用,其实不需要绕弯先过滤对象所有属性,直接针对你要检查的三个固定键做判断即可,逻辑更简单、性能也更好。
推荐实现
直接遍历你需要校验的目标键列表,筛选出对象中对应值为true的键即可:
// 示例对象 const obj = { username: 'bla', admin: true, editor: true, user: false, foo: 'bar' }; // 定义需要检查的键 const checkKeys = ['admin', 'editor', 'user']; const result = checkKeys.filter(key => obj[key] === true);
运行后result的值就是预期的['admin', 'editor'],如果三个键的值全为false,会自然返回空数组,不需要额外判断。
逻辑说明
- 直接从固定的待检查键列表出发,天然跳过了
username、foo这类无关属性,不需要额外做键名的白名单过滤 - 用
=== true做严格相等判断,可以避免把1、非空字符串这类隐式转换为真的值误判为符合条件;如果你的业务场景允许所有真值通过,把判断条件换成!!obj[key]即可。
另一种等价写法
如果你习惯从对象自身的键出发遍历,也可以先用Object.keys()拿到对象所有自有可枚举键,再做过滤:
const result = Object.keys(obj).filter(key => ['admin', 'editor', 'user'].includes(key) && obj[key] === true );
这种写法会遍历对象上的所有键,当对象属性很多时效率比前一种写法低,优先推荐第一种实现。
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

