javascript - 将单个对象拆分为多个对象
问题描述
我有一个 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);
解决方案
在不知道会有多少对象的情况下,最好将它们拆分为对象数组。首先遍历键然后检查它的索引。这假设键总是以数字结尾,并且末尾的数字始终是索引。
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);
推荐阅读
- ajax - 在ajax成功中打印返回值数组
- html - 我的电子邮件签名中的徽标图标飞到网络浏览器的最右侧,但我希望它的位置准确
- php - 如何创建重定向表单
- python - 为什么在我在表中添加列后,vertica 不摄取数据?
- java - 如何将 iaik.pkcs.pkcs11.objects.GenericSecretKey 转换为 java.security 密钥
- data-structures - 迭代程序的时间复杂度分析需要说明
- docker - Kubernetes私有注册中心(gitlab)镜像拉取不同节点
- node.js - 在共享主机上使用 vue-cli-service build / npm run build 时出错(创建工作池时出错)
- javascript - axios拦截器中更改请求方法
- angular6 - 如何在html中调用角度方法?