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

时间:2018-02-18 11:38:13

标签: javascript

给定输入:

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动态设置嵌套属性的方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用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,它也可以工作。