2013-06-27 25 views
2

我想以下结构:加入JavaScript的多维数组

{ 
    "1":[ 
     {"name":"John","Age":"21"} 
     ] 
    "2":[ 
     {"name":"Jone","Age":"22"} 
     ] 
    } 

我要动态地添加objects.This是我的尝试:

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

我得到一个错误“无法呼叫方法“推”未定义

回答

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文档中:Working with objects

+0

看起来他像是将数组中的物体包裹起来。数据[0] .7? – Gohn67

+0

data [i ++]。push ...少一行:) – CME64

+0

var data = {};但是就像Raibaz说的那样,data [i]不是一个数组,所以.push不起作用。使用数据[i] = {“name”:“Raibaz”,“age”:30}工作。 – phpcoderx

0

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

[ 
    { 
     i: { 
     } 
    } 
] 

哪个我s不是你想要的那个,以及你不能访问data.i的原因(因为data是一个数组)。

您应该声明data{i:{}},然后使用括号表示法访问i,如data[i]

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

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++; 
} 
给出你可以初始化对象