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

如何基于指定允许键数组过滤对象数组,仅保留目标键对应属性

问题原因

你混淆了filter和map的使用场景:

  • Array.filter的作用是根据布尔判断结果,决定保留或移除数组中的整个元素,不会修改元素内部的属性结构
  • 你的需求是保留所有外层和内层元素,仅裁剪row子项的多余属性,应该使用Array.map遍历修改元素结构

你原有代码的运行逻辑是:内层el.row.filter返回包含所有row元素的非空数组,在外层filter的判断条件里会被转为布尔值true,所以最终会返回完整的原始data数据,不会做任何属性裁剪。

正确实现代码
const data = [{
    id: 1,
    row: [{
        id: 'a',
        name: 'ab',
        code: 'sdf',
        version: 1
      },
      {
        id: 'b',
        name: 'bc',
        code: 'def',
        version: 3
      },
      {
        id: 'c',
        name: 'cd',
        code: 'afd',
        version: 2
      },
    ]
  },
  {
    id: 2,
    row: [{
        id: 'd',
        name: 'ef',
        code: 'sdf',
        version: 1
      },
      {
        id: 'e',
        name: 'gh',
        code: 'def',
        version: 3
      },
      {
        id: 'f',
        name: 'ij',
        code: 'afd',
        version: 2
      },
    ]
  },
  {
    id: 3,
    row: [{
        id: 'g',
        name: 'kl',
        code: 'asd',
        version: 2
      },
      {
        id: 'h',
        name: 'mn',
        code: 'faf',
        version: 3
      },
      {
        id: 'i',
        name: 'op',
        code: 'dfs',
        version: 1
      },
    ]
  }
]

const allowed = ['id', 'name']

const result = data.map(el => {
  // 保留外层id属性,遍历裁剪row子项的属性
  return {
    id: el.id,
    row: el.row.map(elm => Object.fromEntries(allowed.map(k => [k, elm[k]])))
  }
})

console.log(result)
实现逻辑
  • 遍历外层data数组的每一项,保留外层的id字段
  • 遍历每一项的row数组,对每个子对象通过allowed.map提取指定键的键值对,再用Object.fromEntries组合为裁剪后的新对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04