如何基于键数组创建嵌套的JSON?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (11)

给定输入:

let input = [
  {
    schema: ["user", "email"],
    value: "test@test.com"
  },
  {
    schema: ["user", "name", "firstName"],
    value: "John"
  },
];

let output = {};

for (let i = 0; i < input.length; i++) {
    let data = input[i];

    for (let j = 0; j < data.schema.length; j++) {
        let s = data.schema[j];
        // How to set nested levels here ? eg: output["user"]["email"] = {};
    }
}

预期输出:

{
    "user": {
        "email": "test@test.com",
        "name": { 
            "firstName": "John" 
        }
    }
}

这里“schema”表示JSON中用于数据的嵌套结构。

使用Javascript动态设置嵌套属性的方法是什么?

提问于
用户回答回答于

您可以使用reduce“加深”输出对象,直到需要设置属性/值的级别:

const input = [{schema: ["user", "email"],value: "test@test.com"},{schema: ["user", "name", "firstName"],value: "John"},];
const output = {};

for (const obj of input) {
    obj.schema.slice(0, -1).reduce(
        (acc, lvl) => acc[lvl] || (acc[lvl] = {}), 
        output
    )[obj.schema.slice(-1)[0]] = obj.value;
}

console.log(output);

这样,如果架构数组具有多于2个值,它也可以工作。

扫码关注云+社区

领取腾讯云代金券