首页 > 解决方案 > 将单个对象拆分为多个对象

问题描述

我有一个 JSON 对象,我想将其拆分为多个对象。我尝试将单个 JSON 对象转换为数组。如果缺少键,即meal1、meal2 等,我无法找出分解单个对象的模式。我什至不确定这是否是最好的方法。我感谢任何帮助或正确方向的指示!

{
  "fullName1" : "John Doe",
  "attendance1" : 1,
  "meal1" : "salmon",
  "fullName2" : "Jane Doe",
  "attendance2" : 0
}

期望的结果

{
  "fullName" : "John Doe",
  "attendance" : 1,
  "meal" : "salmon"
},
{
  "fullName" : "Jane Doe"
  "attendance" : 0
}

就我的尝试而言,这就是我已经走了多远:

const entries = [...elements];
// check for valid elements
const isValidElement = element => {
  return element.name && element.value;
};
const isValidValue = element => {
  return (!['radio'].includes(element.type) || element.checked);
};
const formToJSON = elements =>
  [].reduce.call(elements, (data, element) => {
    if (isValidElement(element) && isValidValue(element)) {
      data[element.name] = element.value;
    }
    return data;
  }, {});
//
const singleArray = formToJSON(entries);

标签: javascriptarraysecmascript-6ecmascript-5

解决方案


在不知道会有多少对象的情况下,最好将它们拆分为对象数组。首先遍历键然后检查它的索引。这假设键总是以数字结尾,并且末尾的数字始终是索引。

var obj = {
  "fullName1" : "John Doe",
  "attendance1" : 1,
  "meal1" : "salmon",
  "fullName2" : "Jane Doe",
  "attendance2" : 0
};
var objs = [];
Object.keys(obj).forEach(function(key) {
  var match = key.match(/(.*)(\d.*)$/);
  var newKey = match[1];
  var index = parseInt(match[2]) - 1;
  objs[index] = objs[index] || {};
  objs[index][newKey] = obj[key];
})
console.log(objs);


推荐阅读