首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Javascript将动态对象转换为基于键子串的多级JSON数组

用Javascript将动态对象转换为基于键子串的多级JSON数组
EN

Stack Overflow用户
提问于 2018-05-10 13:57:18
回答 4查看 242关注 0票数 5

我想从基于键子串的扁平动态对象创建多级JSON数组

动态对象示例

代码语言:javascript
运行
复制
{
  Honda_Bike: "white",
  Pulsar_Bike: "black",
  Royal_Enfield_Bike: "red",
  Hyundai_Car: "blue",
  Mercedes_Car: "grey",
  BMW_Car: "red"
}

Json多级数组示例

代码语言:javascript
运行
复制
[{
  vehicle : {
    bike: {
      Honda_Bike: "white",
      Pulsar_Bike: "black",
      Royal_Enfield_Bike: "red"
    },
    car: {
      Hyundai_Car: "blue",
      Mercedes_Car: "grey",
      BMW_Car: "red"
    },
  }
}]
EN

回答 4

Stack Overflow用户

发布于 2018-05-10 14:06:19

使用reduce遍历输入对象的条目,以检查条目并将其分类为所需的输出格式:

代码语言:javascript
运行
复制
const input = {
  Honda_Bike: "white",
  Pulsar_Bike: "black",
  Royal_Enfield_Bike: "red",
  Hyundai_Car: "blue",
  Mercedes_Car: "grey",
  BMW_Car: "red"
};
const output = [{ }];
output[0].vehicle = Object.entries(input).reduce((a, [key, val]) => {
  const vehicleName = key.match(/([^_]+)$/)[0];
  if (!a[vehicleName]) a[vehicleName] = {};
  a[vehicleName][key] = val;
  return a;
}, {});
console.log(output);

票数 1
EN

Stack Overflow用户

发布于 2018-05-10 14:12:51

以下是使用Object.reduce完成此操作的简单方法。首先使用Object.keys获取对象自己的可枚举键,然后使用Object.reduce

代码语言:javascript
运行
复制
let o = {
  Honda_Bike: "white",
  Pulsar_Bike: "black",
  Royal_Enfield_Bike: "red",
  Hyundai_Car: "blue",
  Mercedes_Car: "grey",
  BMW_Car: "red"
}
let keys = Object.keys(o);
let result = keys.reduce((acc, cv) => {
  let [type] = cv.split('_').reverse();
  acc[type] = acc[type] || {};
  acc[type][cv] = o[cv];
  return acc;
}, {});
result = [{
  vehicle: result
}];
console.log(result);

票数 1
EN

Stack Overflow用户

发布于 2018-05-10 14:34:18

您可以遍历data对象的键,根据下划线_拆分data对象的每个键,然后获得最后拆分的值,为内部对象创建新的键。在每次迭代中,检查是否创建了这个新的键,并根据该键将值分配给这个内部对象。

代码语言:javascript
运行
复制
var data = {
    Honda_Bike: "white",
    Pulsar_Bike: "black",
    Royal_Enfield_Bike: "red",
    Hyundai_Car: "blue",
    Mercedes_Car: "grey",
    BMW_Car: "red"
  };

var vehicleObj = {};
//loop thorugh the data object keys
Object.keys(data).forEach((key)=>{
  //split the key and get the last splited value
  var splitArray = key.split('_');
  var newKey = splitArray[splitArray.length - 1];
  //create a new object based on the splited value
  if(vehicleObj[newKey]){
    vehicleObj[newKey][key] = data[key];
  } else {
    vehicleObj[newKey] = {};
    vehicleObj[newKey][key] = data[key];
  }
});
//create final output object
var res = [{
  'vehicle': vehicleObj
}];
console.log(res);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50266392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档