如何动态地在js对象中写入键(作为参数传入函数)?

时间:2015-07-14 13:43:56

标签: javascript javascript-objects

temp = temp[array[i]] = {name:value};

在上面的代码片段中,名称实际上是我的函数的参数,其值为first_name。

这是功能。

function createHierarchy(obj, group, name, value){
    console.log("group = "+group+"\nname ="+name)
    var array = group.split(".");
    var temp = obj;
    var len  = array.length;
    for(var i = 0; i < len; i++) {
        if(temp[array[i]] === undefined)
            temp = temp[array[i]] = {name:value};
        else
            temp = temp[array[i]][name] = value;
    }
    return obj;
}

被转储的对象的密钥名称等于传递的标识符,而不是其动态值“first_name”。

我缺少什么。如果我应该更新一些内容,请告诉我。

实际输出

name: "cafebabe"

预期输出

first_name : "cafebabe"

FYI

将此功能称为

createHierarchy({}, 'personal_details', 'first_name', 'cafebabe')

1 个答案:

答案 0 :(得分:1)

这段代码不正确,您不能将name用作默认值中的变量,如下所示:

if(temp[array[i]] === undefined)
    temp = temp[array[i]] = {name:value};
else
    temp = temp[array[i]][name] = value;

将其替换为:

temp[array[i]] = temp[array[i]] || {}; // If `temp[array[i]]` doesn't exist, add it.
temp = temp[array[i]][name] = value;  // Assign the `value`.

JavaScript不允许将变量用作对象文字中的对象键。在这个例子中:

{ name: value }

JavaScript解释器永远不会寻找name变量。它只会使用"name"作为密钥。

使用变量作为对象键的方式是通过括号表示法:

myObject[name]