Javascript 如何基于密钥数组创建嵌套JSON?

Javascript 如何基于密钥数组创建嵌套JSON?,javascript,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];

给定输入:

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"] = {};
    }
}
这里“schema”表示数据的JSON嵌套结构


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

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

const-input=[{schema:[“用户”,“电子邮件”],值:test@test.com},{schema:[“user”,“name”,“firstName”],值:“John”},];
常量输出={};
用于(输入的常量对象){
片(0,-1).reduce(
(acc,lvl)=>acc[lvl]| |(acc[lvl]={}),
输出
)[obj.schema.slice(-1)[0]]=obj.value;
}

控制台日志(输出)什么是
data.schema
?输出[“用户”][“电子邮件”]={}怎么样不起作用?@Xufox:我不能使用输出[“用户”][“电子邮件”],因为“用户”和“电子邮件”将是动态的。好的,然后用包含动态字符串的变量替换
“用户”
“电子邮件”
。请参阅。它表示为数组,例如:[“user”,“email”],因此我需要循环来设置它。请参考例子,我已经更新了。OP已经改变了问题的主体!谢谢你让我知道。相应地调整了我答案中的输入。工作完美无瑕,谢谢:)
{
    "user": {
        "email": "test@test.com",
        "name": { 
            "firstName": "John" 
        }
    }
}