是否有可能在javascript中创建一个二维关联数组?

时间:2010-12-26 14:59:47

标签: javascript arrays

我只想以这种方式获取数据:

var _2dimen = {};

_2dimen['window1']['panel1'] = '2010-10-01'
_2dimen['window1']['panel2'] = '2010-10-01'
...
_2dimen['window3']['panel1'] = '2010-10-01'

哪个窗口和面板编号是动态的。这意味着我可以使用以下模式: 我的意思是:在我的情况下,窗口和面板的变量是动态创建的,窗口可能是window1或window2 ......面板可能是panel2,panel4。

var window = windowNumber, panel= panelNumber;

_2dimen[window][panel] = 'some date here';

如何构造代码以分配和编辑值?

我写的代码正是我认为的可能,它没有用!!   _2dimen [window] ='数据'正常,我添加 [面板]

 _2dimen[window][panel] = 'data' the firebug prompts me that :

_2dimen[window] is undefined
     _2dimen[window][panel] = date; 

非常感谢!

1 个答案:

答案 0 :(得分:4)

JS中有些人称之为“关联数组”只是对象:

var twoD = { window1: {
    panel1: '2010-10-01',
    panel2: '2010-10-02',
    ...
  }, 
  window3: {
    panel1: '2010-12-01',
    ...
  }
};

如果您实际上正在命名诸如'window1'和'panel2'之类的索引,那么更好的方法是使用数组。这样,您可以循环显示面板和窗口,但仍然可以在顶级对象和窗口上设置其他属性。

var twoD = { windows: [
    { panels: ['2010-10-01', '2010-10-02', ...
    ...
    // window3
    { panels: ['2010-12-01']}
  ],
  foo: 'bar'
};
...
twoD.windows[0].panels[1] // '2010-10-02'

请记住,标识符不能以数字开头。

如果在Windows上设置的面板跳过某些索引,您也可以这样做。请注意,您无法设置未定义值的属性。 _2dimen[window][panel]={}未定义时_2dimen[window]失败。你需要测试&在访问次要索引处的元素之前,在主索引处设置元素。

function TwoD() {
    this.windows = [];
}
TwoD.prototype.window = function(i) {
    if (! this.windows[i]) {
        this.windows[i] = {panels: []};
    }
    return this.windows[i];
};
...
var wall = new TwoD();
wall.window(2).panels[1] = '2010-12-02';

这非常接近您当前的实现,但具有允许迭代窗口和放大器的优点。设置其他属性时的面板。