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

在JS中提取嵌套数组的supplier属性并去重为字符串数组

提取嵌套数组中supplier属性并去重的简洁实现

需求说明

我需要从嵌套数组中提取supplier属性,想要更优更简洁的实现方式,同时重复值仅显示一次,预期输出为 ['Moscow', 'USA']。

现有实现代码

const oldData = [
  {
    "uid": "AA1",
    "members": [
      {
        "id": 123,
        "createdTs": "2018-11-07T04:55:00.000+00:00",
        "modifiedTs": "2022-03-17T23:29:06.000+00:00",
        "uid": "d@yahoo.com",
        "name": "Dayanara",
        "active": true,
        "lastLogin": "2020-10-28T03:22:22.000+00:00",
        "supplier": "Moscow"
      },
      {
        "id": 456,
        "createdTs": "2018-10-28T22:42:57.000+00:00",
        "modifiedTs": "2020-06-01T05:01:11.000+00:00",
        "uid": "j@yahoo.com",
        "name": "John Jones",
        "active": true,
        "lastLogin": "2020-06-01T05:00:35.000+00:00",
        "supplier": null
      },
      {
        "id": 789,
        "createdTs": "2022-01-28T05:21:37.000+00:00",
        "modifiedTs": "2022-02-04T06:24:54.000+00:00",
        "uid": "g@gmail.com",
        "name": "Gasmund",
        "active": true,
        "lastLogin": null,
        "supplier": ""
      }
    ]
  },
  {
    "uid": "AA2",
    "members": [
      {
        "id": 10112,
        "createdTs": "2022-07-07T09:51:14.000+00:00",
        "modifiedTs": "2022-07-07T09:51:14.000+00:00",
        "uid": "aa@yahoo.com",
        "name": "deqwd",
        "active": true,
        "lastLogin": null,
        "supplier": "USA"
      },
      {
        "id": 101123,
        "createdTs": "2022-07-07T09:51:14.000+00:00",
        "modifiedTs": "2022-07-07T09:51:14.000+00:00",
        "uid": "aa33@yahoo.com",
        "name": "fewfewffwef",
        "active": true,
        "lastLogin": null,
        "supplier": "USA"
      }
    ]
  }
]

const newData =  oldData.flatMap((groupUsers) => (
  groupUsers.members.map(({ supplier }) => ({
   supplier: supplier
  }))
));
    
console.log(newData)

优化实现方案

可以通过扁平化提取+过滤无效值+去重的链式调用实现更简洁高效的代码,直接得到预期的结果数组:

const suppliers = [...new Set(
  oldData.flatMap(group => group.members.map(member => member.supplier))
  .filter(supplier => supplier)
)];

console.log(suppliers); // 输出: ['Moscow', 'USA']

代码解释

  • flatMap 直接提取所有层级的supplier值,避免生成额外的对象数组,比原代码更轻量化
  • filter(supplier => supplier) 过滤掉null、空字符串等无效值(这些不是有效供应商),如果需要更严谨的过滤逻辑,也可以写成filter(s => s !== null && s !== '')
  • new Set() 自动实现去重,最后用扩展运算符[...]将Set转换回数组,得到唯一的有效供应商列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:21:30