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。