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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:57:21