Javascript:如何使用数组给定的对象名称动态创建嵌套对象,包括数组

Javascript:如何使用数组给定的对象名称动态创建嵌套对象,包括数组,javascript,arrays,Javascript,Arrays,与这个问题非常相似: 而不是打电话 assign(obj, keyPath, value) 前面答案的用法示例: var accountinfo = {} assign(accountinfo, ["name", "addressinfo", "zipcode"], "90210"); 这将产生: accountinfo = {name: "", addressinfo: {zipcode:"90210"}}; 现在,我想支持阵列。。。在上面的示例中,我希望每个帐户支持多个addres

与这个问题非常相似:

而不是打电话

assign(obj, keyPath, value)
前面答案的用法示例:

var accountinfo = {}

assign(accountinfo, ["name", "addressinfo", "zipcode"], "90210");
这将产生:

accountinfo = {name: "", addressinfo: {zipcode:"90210"}};
现在,我想支持阵列。。。在上面的示例中,我希望每个帐户支持多个addressinfo。我想说:

assign(accountinfo, ["name", "addressinfo[1]", "zipcode"], "90210");
结果将是:

accountinfo = {name: "", addressinfo: [{},{zipcode:"90210"}]}
var regex=/\[([0-9]+)\]/
将显示括号内的#,但我不确定如何遍历数组中的每个元素以确保它存在(如果不存在则创建它)。。困难的是,对作为函数一部分提交的每个数组元素都支持这一点(我想说:

assign(accountinfo, ["family", "name[3]", "addressinfo[1]", "zipcode"], "90210");
编辑:

我明白了

function assign(obj, keyPath, value) {
    keyPath = keyPath.split(‘.’);
    lastKeyIndex = keyPath.length - 1;
    var re = /^(.+?)\[*(\d+)*\]*$/;
    for (var i = 0; i < lastKeyIndex; i++) {
        key = keyPath[i];
        var ind;
        var middle = re.exec(key);
        key = middle[1];
        ind = middle[2];
        if (ind) {
            if (!(obj[key]))
                obj[key] = [];
            if (!(obj[key][ind]))
                obj[key][ind] = {};
        }
        if (!(key in obj))
            obj[key] = {};

        if (ind)
            obj = obj[key][ind];
        else
            obj = obj[key];
    }
    obj[keyPath[lastKeyIndex]] = value;
}
功能分配(对象、键路径、值){
keyPath=keyPath.split('.');
lastKeyIndex=keyPath.length-1;
变量re=/^(+.+?)\[*(\d+*\]*$/;
对于(var i=0;i
您能解释一下为什么要这样做吗?为什么需要以这样的数组传递数据?虽然这是可能的,但这种方法非常不标准,因此我想知道是否有更好的替代方法。我同意Bill的观点。这似乎是一系列非标准的工作,以解决一个可能更好解决的问题呃,比尔,我要做的是从一个动态网页创建一个JSON。我在一个网页上的名字是“name.address[0].zipcode”。用JQuery我可以说assign(accountinfo,{{inputName},{{inputVal})。(我显然是在用“.”分割)我想添加另一个地址,所以我点击了a+,jquery会动态递增#,这样下一个输入框的名称将为name.address[1].zipcode。