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

使用JavaScript根据键子串将动态对象转换为多级JSON数组

解决方案:从扁平对象按键子串生成多级JSON结构

嘿,我来帮你搞定这个需求——把带后缀的扁平对象转换成多级嵌套的JSON结构对吧?先理清楚你的输入和期望输出,再给你具体的实现方案。

你的输入示例

const flatVehicleObj = { 
  Honda_Bike: "white", 
  Pulsar_Bike: "black", 
  Royal_Enfield_Bike: "red", 
  Hyundai_Car: "blue", 
  Mercedes_Car: "grey", 
  BMW_Car: "red" 
};

期望的多级JSON输出

[{ 
  vehicle : { 
    bike: { 
      Honda_Bike: "white", 
      Pulsar_Bike: "black", 
      Royal_Enfield_Bike: "red" 
    }, 
    car: { 
      Hyundai_Car: "blue", 
      Mercedes_Car: "grey", 
      BMW_Car: "red" 
    } 
  } 
}]

实现思路

核心就是按键的后缀分组,步骤很清晰:

  • 遍历扁平对象的每一组键值对
  • 拆分键名,提取出后缀(比如_Bike里的Bike)
  • 把同一后缀的键值对归类到对应的嵌套层级中
  • 最后包装成你需要的数组格式

代码实现(JavaScript)

我写了两种版本,一种是针对你给定的固定后缀(bike/car),另一种是能自动适配新后缀的通用版:

固定后缀版(匹配你的示例需求)

function transformToNestedObj(flatObj) {
  // 初始化嵌套结构的核心容器
  const vehicleContainer = { bike: {}, car: {} };

  // 遍历扁平对象的所有键值对
  for (const [key, value] of Object.entries(flatObj)) {
    // 拆分键名,拿到后缀部分(比如从"Honda_Bike"得到"Bike")
    const suffix = key.split('_').pop();
    // 转成小写,匹配嵌套结构里的键名
    const nestedKey = suffix.toLowerCase();

    // 将当前键值对添加到对应的嵌套对象中
    if (vehicleContainer[nestedKey]) {
      vehicleContainer[nestedKey][key] = value;
    }
  }

  // 包装成最终的数组格式
  return [{ vehicle: vehicleContainer }];
}

// 测试一下
const flatObj = { 
  Honda_Bike: "white", 
  Pulsar_Bike: "black", 
  Royal_Enfield_Bike: "red", 
  Hyundai_Car: "blue", 
  Mercedes_Car: "grey", 
  BMW_Car: "red" 
};

const result = transformToNestedObj(flatObj);
console.log(JSON.stringify(result, null, 2));

通用适配版(自动处理新后缀)

如果之后要新增_Truck、_Bus这类后缀,用这个版本更灵活:

function transformToNestedObj(flatObj) {
  const vehicleContainer = {};

  for (const [key, value] of Object.entries(flatObj)) {
    const suffix = key.split('_').pop();
    const nestedKey = suffix.toLowerCase();

    // 如果当前后缀对应的嵌套对象不存在,先创建空对象
    if (!vehicleContainer[nestedKey]) {
      vehicleContainer[nestedKey] = {};
    }
    vehicleContainer[nestedKey][key] = value;
  }

  return [{ vehicle: vehicleContainer }];
}

比如新增Ford_Truck: "yellow",这个版本会自动生成truck层级,不用改代码~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:50:31