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

为嵌套子文档添加基于布尔条件的available字段

为嵌套数组中的每个prop添加available字段

现有如下结构的数组数据:

const fruits = [
  {
    "name": "Orange",
    "variants": [
      {
        "color": "orange",
        "props": []
      }
    ]
  },
  {
    "name": "Banana",
    "variants": [
      {
        "color": "green",
        "props": [
          {
            "uid": 1,
            "grade": 3
          },
          {
            "uid": 2,
            "grade": 5
          },
          {
            "uid": 3,
            "grade": 7
          }
        ]
      }
    ]
  }
];

以及一个可用uid数组:

const available_props = [1,2];

需求是为每个variant下的props数组中的每个prop对象添加available字段,字段值取决于当前prop的uid是否存在于available_props数组中。


解决方案

通过嵌套遍历数组对象实现,为提升查找效率,先将available_props转换为Set(查找时间复杂度从O(n)降至O(1)):

// 转换为Set提升查找效率
const availableSet = new Set(available_props);

// 处理数据(纯函数方式,不修改原数据)
const result = fruits.map(fruit => ({
  ...fruit,
  variants: fruit.variants.map(variant => ({
    ...variant,
    props: variant.props.map(prop => ({
      ...prop,
      available: availableSet.has(prop.uid)
    }))
  }))
}));

console.log(result);

输出结果

[
  {
    "name": "Orange",
    "variants": [
      {
        "color": "orange",
        "props": []
      }
    ]
  },
  {
    "name": "Banana",
    "variants": [
      {
        "color": "green",
        "props": [
          {
            "uid": 1,
            "grade": 3,
            "available": true
          },
          {
            "uid": 2,
            "grade": 5,
            "available": true
          },
          {
            "uid": 3,
            "grade": 7,
            "available": false
          }
        ]
      }
    ]
  }
]

代码说明

  • 使用map方法遍历数组,通过对象扩展运算符...保留原有属性,避免修改原始数据
  • 转换available_props为Set,在数据量较大时能显著提升查找性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:01:09