我有一个包含序列化 HTMLFormElement
(二维)的预制属性名称的对象:
var plain = {
id: 1,
'items[A][Z]': 2,
'items[B]': false,
'items[C][][A]': 1
}
我想通过创建相应的子对象来转换对象:
var result = {
id: 1,
items: {
A: {Z:2},
B: false,
C: [ {A:1} ]
}
}
据我所知,这是一种常见的做法 - 但我找不到关于该主题的更多资源。类似的东西通常如何调用?将 plain
转换为 result
的最佳方法是什么?
编辑:我用Array
更新了示例。这个好像有关系,express的body-parser
也是支持的。
最佳答案
您可以通过行走给定的对象来分割路径并减少路径。如果不存在对象,则使用名称创建一个新属性,稍后分配值并删除拆分的属性。
var plain = { id: 1, 'items[A][Z]': 2, 'items[B]': false };
Object.keys(plain).forEach(function (k) {
var path = k.replace(/\[/g, '.').replace(/\]/g, '').split('.'),
last = path.pop();
if (path.length) {
path.reduce(function (o, p) {
return o[p] = o[p] || {};
}, plain)[last] = plain[k];
delete plain[k];
}
});
console.log(plain);
ES6
var plain = { id: 1, 'items[A][Z]': 2, 'items[B]': false };
Object.keys(plain).forEach(k => {
var path = k.replace(/\[/g, '.').replace(/\]/g, '').split('.'),
last = path.pop();
if (path.length) {
path.reduce((o, p) => o[p] = o[p] || {}, plain)[last] = plain[k];
delete plain[k];
}
});
console.log(plain);
关于javascript - 将方括号符号转换为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40577789/