1
var keys1 = ["foo", "moreFoo"],
value1 = "bar",
keys2 = ["foo", "ultraFoo"],
value2 = "bigBar";

我想做一个可以为我构建一个对象的函数:

object {
foo : {moreFoo: "bar", ultraFoo: "bigBar"}
}

我想把我的每一个数组都做以下事情:

function recursiveObjectBuild(object, keys, value) {
    var index = 0;
    function loop(object, index) {
        var key = keys[index];
        //Property exists, go into it
        if (key in object) {
            loop(object[key], ++index);
        //Property doesn't exist, create it and go into it
        } else if (index < keys.length-1) {
            object[key] = {};
            loop(object[key], ++index);
        //At last key, set value
        } else {
            object[key] = value;
            return object;
        }
    }
    return loop(object, 0);
}

哪个应该在 IMO 中起作用,但不起作用(无限循环,一定是一个愚蠢的错误,但看不到它)。

而且我敢肯定一定有一个更简单的方法

4

1 回答 1

1

尝试以下操作:

function objectBuild(object, keys, value) {
    for (var i = 0; i < keys.length-1; i++) {
        if (!object.hasOwnProperty(keys[i]))
            object[keys[i]] = {};
        object = object[keys[i]];
    }
    object[keys[keys.length-1]] = value;
}

示例用法(见实际操作):

var object = {};
objectBuild(object, ["foo", "moreFoo"], "bar");
objectBuild(object, ["foo", "ultraFoo"], "bigBar");
// object --> {foo: {moreFoo: "bar", ultraFoo: "bigBar}}
于 2013-06-24T16:24:42.220 回答