我想要以下结构:
{
"1":[
{"name":"John","Age":"21"}
]
"2":[
{"name":"Jone","Age":"22"}
]
}
我想动态添加对象。这就是我尝试过的:
var i = 0;
var data= [{i:{}}];
function add(){
data= [{i:{}}];
data.i.push({
"name":"Zack",
"age":22
});
i++;
}
我收到错误“无法调用方法'推送'未定义”
答案 0 :(得分:4)
要动态访问属性,请使用括号表示法。 data= [{i:{}}]
没有做你想做的事情,它没有使用你刚刚定义i
变量的事实。
在您的函数中,您正在替换data
的外部值。
你想要的可能更简单:
var i = 0;
var data= {};
function add(){
data[i] = data[i]||[];
data[i].push({
"name":"Zack",
"age":22
});
i++;
}
此MDN文档中的更多详细信息:Working with objects
答案 1 :(得分:0)
通过将data
声明为[{i:{}}]
,您获得的结构实际上是
[
{
i: {
}
}
]
哪个不是您想要的,以及您无法访问data.i
的原因(因为data
是一个数组)。
您应将data
声明为{i:{}}
,然后使用括号表示法访问i
,data[i]
。
此外,由于data[i]
不是数组,.push
也不会有效,因此您应该使用data[i] = {"name": "Raibaz", "age": 30}
之类的内容。
答案 2 :(得分:0)
在Javascript中,使用以下语法
创建多维数组var mArray = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]];
和
mArray[0][0] gives 1
mArray[0][1] gives 2
mArray[1][0] gives 3
mArray[1][1] gives 4
您可以初始化多维数组,如下所示
var i = 0;
var data= [];
您要创建的是数组的对象。在这种情况下,语法是(如在您的代码中)
var mObject = {
"1":[
{"name":"John","Age":"21"}
]
"2":[
{"name":"Jone","Age":"22"}
]
};
您可以按以下方式初始化您的对象
var i = 1;
var data= {};
在这两种情况下,函数都可以写成如下所示
function add(){
data[i] = data[i] || []; // initializes array if it is undefined
data[i].push({
"name":"Zack",
"age":22
});
i++;
}