javascript - 将方括号符号转换为对象

标签 javascript object

我有一个包含序列化 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/

相关文章:

javascript - HTML 链接会像表单一样下拉菜单?

javascript - ExpressJS 中记录器模块定义的问题

java - 带有 Java 后端的 angularjs

javascript - JS document.getElementById() 与 Int

Javascript - 在对象中存储函数 - 不好的做法?

java - 如何返回对象数组的值

java - 如何在 Java 中 DRY 这些代码块?

javascript - 如何将数组的元素添加到另一个对象并计数

c++ - 对象与实例的区别 : C++

javascript - 成功上传到 Google 云端硬盘但打开时文件为空(仍有大小)