2

我想要以下结构:

    {
     "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++;
    }

我收到一个错误“无法调用未定义的方法‘push’

4

3 回答 3

4
  1. 要动态访问属性,请使用方括号表示法。data= [{i:{}}]不做你想做的事,它不使用你刚刚定义i变量的事实。

  2. 在您的函数中,您正在替换data.

你想要的可能要简单得多:

var i = 0;
var data= {};
function add(){
  data[i] = data[i]||[];
  data[i].push({
    "name":"Zack",
    "age":22
  });
  i++;
}

此 MDN 文档中的更多详细信息:使用对象

于 2013-06-27T07:02:06.280 回答
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++;
}
于 2013-06-27T07:10:08.370 回答
0

通过声明dataas [{i:{}}],您获得的结构实际上是

[
    {
        i: {
        }
    }
]

哪个不是您想要的,以及您无法访问的原因data.i(因为data是数组)。

您应该声明dataas {i:{}},然后使用i括号符号访问 as data[i]

此外,由于data[i]不是数组,.push因此也不起作用,因此您应该使用类似data[i] = {"name": "Raibaz", "age": 30}.

于 2013-06-27T07:06:36.470 回答