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

如何用Lodash扁平化嵌套对象数组并转换JSON对象(含CamelCase处理)

嘿,这两个Lodash的实用场景我经常碰到,给你详细拆解解决方案:

1. 扁平化嵌套的对象数组

假设你有带层级嵌套(比如包含children数组)的对象数组,像这样:

const nestedData = [
  { id: 1, name: "Parent 1", children: [
    { id: 2, name: "Child 1" },
    { id: 3, name: "Child 2", children: [{ id: 4, name: "Grandchild 1" }] }
  ]},
  { id: 5, name: "Parent 2" }
];

要把所有层级的对象平铺成一维数组,可以用Lodash的_.flatMapDeep——它能递归处理嵌套结构,帮你一次性扁平化:

const flattenedArray = _.flatMapDeep(nestedData, item => {
  // 如果当前项有子数组,就返回当前项(可选择移除children属性)+ 子数组
  if (item.children) {
    return [_.omit(item, "children"), ...item.children];
  }
  // 没有子数组的项直接返回
  return item;
});

如果你的嵌套是纯数组嵌套(比如[[1,2], [3,[4]]]),直接用_.flattenDeep(nestedArray)就搞定了,不用额外逻辑。

2. 将JSON对象转换为CamelCase格式

要把蛇形命名(user_id)、短横线命名(user-name)的键转换成驼峰式(userId),可以结合_.camelCase和递归遍历,处理嵌套的对象和数组:
先看原始的蛇形命名JSON:

const snakeCaseData = {
  user_id: 123,
  user_name: "John Doe",
  user_details: {
    email_address: "john@example.com",
    phone_number: "123-456-7890",
    address_info: { street_name: "Main St", zip_code: "10001" }
  },
  order_history: [{ order_id: 1, order_date: "2024-01-01" }, { order_id: 2 }]
};

写一个递归转换函数:

const toCamelCase = obj => {
  // 处理数组:遍历每个元素递归转换
  if (_.isArray(obj)) {
    return obj.map(item => toCamelCase(item));
  }
  // 处理对象:遍历键并转换为驼峰,值递归处理
  if (_.isObject(obj)) {
    return _.transform(obj, (result, value, key) => {
      result[_.camelCase(key)] = toCamelCase(value);
    }, {});
  }
  // 非对象/数组类型直接返回
  return obj;
};

const camelCaseData = toCamelCase(snakeCaseData);

如果只需要转换顶层键,不需要递归处理嵌套结构,用_.mapKeys更简单:

const topLevelCamelCase = _.mapKeys(snakeCaseData, (val, key) => _.camelCase(key));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:12:15