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

如何从对象数组中仅提取值为true的键值对

问题描述

从API获取到如下对象数组,需要仅提取每个对象中值为true的键值对,最终用Object.keys()展示权限键。

数据示例:

[
  {
    admin: false,
    createdAt: "2022-08-21T05:32:20.936Z",
    id: 8,
    read: false,
    write: true,
  },
];

预期结果:

[{write:true}]

尝试的代码(未成功):

item.map(tab => {
  return Object.keys(tab).reduce((acc: string, key) => {
    if (tab[key]) {
      acc[key] = tab[key];
    }
    return acc;
  }, {});
}),
解决方案

你代码的核心问题是reduce累加器acc的类型声明错误——你把它标注成了string,但实际上它应该是一个对象。修正类型后就能正常工作:

const filteredPermissions = item.map(tab => {
  return Object.keys(tab).reduce((acc: Record<string, boolean>, key) => {
    // 只保留布尔类型且值为true的键值对,避免误判非权限字段
    const value = tab[key];
    if (typeof value === 'boolean' && value) {
      acc[key] = value;
    }
    return acc;
  }, {});
});

补充说明

  1. 类型修正:将acc: string改为acc: Record<string, boolean>(或直接acc: {},显式类型更严谨),确保累加器是对象类型,才能正确添加键值对。
  2. 字段过滤优化:加入typeof value === 'boolean'判断,避免把id(非0数字)、createdAt(非空字符串)这类非布尔值字段误判为true,只筛选权限相关的布尔型字段。

执行后就能得到预期的[{write:true}]结果,后续可通过Object.keys(filteredPermissions[0])拿到权限键数组['write']。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:45:45