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

如何扁平化含childFilters的嵌套对象数组?已尝试lodash方法未果

解决方案:将父对象属性与子项合并展开为新数组

原始输入数组

[
    {
        "_id": "63c6cd09c4836daca5a8ea51",
        "groupBy": "Title Metadata",
        "name": "Search Title Name",
        "tooltip": "Searches for books based on title input",
        "renderNATypes": false,
        "isFrequentlyUsed": true,
        "childFilters": [
            {
                "_id": "63c6cd09c4836daca5a8ea1f",
                "controlType": {
                    "name": "inputbox"
                }
            },
            {
                "_id": "63c6cd09c42136daca5a8ea1f",
                "controlType": {
                    "name": "dropdown"
                }
            }
        ]
    }
]

期望输出数组

[
    {
        "_id": "63c6cd09c4836daca5a8ea51",
        "child_id": "63c6cd09c4836daca5a8ea1f",
        "groupBy": "Title Metadata",
        "name": "Search Title Name",
        "tooltip": "Searches for books based on title input",
        "renderNATypes": false,
        "isFrequentlyUsed": true,
        "controlType": {"name": "inputbox"}
    },
    {
        "_id": "63c6cd09c4836daca5a8ea51",
        "child_id": "63c6cd09c42136daca5a8ea1f",
        "groupBy": "Title Metadata",
        "name": "Search Title Name",
        "tooltip": "Searches for books based on title input",
        "renderNATypes": false,
        "isFrequentlyUsed": true,
        "controlType": {"name": "dropdown"}
    }
]

实现方案

1. 原生JavaScript实现

利用Array.prototype.flatMap遍历父元素,分离出childFilters后,将父元素剩余属性与每个子元素的关键属性合并:

const originalArray = [/* 你的原始数组 */];

const result = originalArray.flatMap(parent => {
  // 提取childFilters,保留父元素其他属性
  const { childFilters, ...parentProps } = parent;
  // 遍历子过滤器生成目标结构对象
  return childFilters.map(child => ({
    ...parentProps,
    child_id: child._id,
    controlType: child.controlType
  }));
});

console.log(result);

2. Lodash实现

使用_.flatMap配合_.map,逻辑与原生方法一致:

const _ = require('lodash');
const originalArray = [/* 你的原始数组 */];

const result = _.flatMap(originalArray, parent => {
  const { childFilters, ...parentProps } = parent;
  return _.map(childFilters, child => ({
    ...parentProps,
    child_id: child._id,
    controlType: child.controlType
  }));
});

console.log(result);

核心逻辑是先剥离父元素的childFilters数组,再将父元素的基础属性逐个与子元素的_id(重命名为child_id)、controlType合并,最终展开为一维数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:10:26