添加到javascript多维数组

时间:2013-06-27 07:00:25

标签: javascript

我想要以下结构:

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

我收到错误“无法调用方法'推送'未定义

3 个答案:

答案 0 :(得分:4)

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

  2. 在您的函数中,您正在替换data的外部值。

  3. 你想要的可能更简单:

    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:{}},然后使用括号表示法访问idata[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++;
}