设置多维数组并使用.push()的问题

时间:2011-09-29 03:58:13

标签: javascript

我正在尝试设置一个多维数组,我可以将值推送到需要的位置。

例如,我有cacheArray = new Array(col0Array, col1Array, col2Array);可以使用cacheArray[0]等进行访问...

现在,在一个循环中,我会检查cacheArray[column_number].length,这将是colArray中的任何一个的长度。取决于我想要的cacheArray[column_number].push("my_class");

我的目的是将css类名添加到子列数组中,并检查该列的子数组中的前一个值,以便获得方格颜色效果。但是像我一样推动会给我一个错误:cacheArray[column_number].push不是函数。

有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:1)

如何初始化数据结构并不完全清楚。这将初始化一个包含三列的数组,其中每列本身就是一个数组:

var cacheArray = [[], [], []];

然后,您可以将值推送到每个子数组中:

cacheArray[0].push("my_class");
cacheArray[0].push("his_class");
cacheArray[0].push("nobodys_class");
cacheArray[1].push("their_class");
cacheArray[2].push("your_class");

这将导致cacheArray的数据结构:

[["my_class", "his_class", "nobodys_class"], ["their_class"], ["your_class"]];

在现代浏览器中,您可以在此处看到它:http://jsfiddle.net/jfriend00/f9hy4/。我说现代浏览器只是因为示例代码需要JSON.stringify()来显示结果。

答案 1 :(得分:0)

也许我错过了一些东西,但是如果你正在初始化一个多维(而不是两个)维数组,那么cacheArray [column_number] .push将不会作为一个函数存在,因为你只提供其中一个维度。

cacheArray [column_number] .push(“my_class”)在初始化二维数组时会起作用,因为你会推进cacheArray [column_number]上的数组。因此,如果column_number为1,并且这是您推送的第一个项目,则cacheArray [1] [0]将等于“my_class”。

我不禁想到有一种更简单的方法可以做到这一点,也许是一组对象可以保存每列的最后和当前值?

答案 2 :(得分:0)

您已将数组cacheArray声明为单维,通过初始化将其设为二维数组 您实际上是将新值推送到未退出的cacheArray[column_number][some_index],此语句表明您正在推送不存在的索引my_class中的cacheArray[column_number][some_index],这就是为什么它给出错误。

你可以试试这个:
cacheArray = new Array(col0Array, col1Array, col2Array);
for(var i = 0, i = cacheArray.length; i++)
cacheArray[i] = new Array();
cacheArray[column_number].push("my_class");