如何创建JavaScript多维数组

时间:2011-04-27 15:07:35

标签: javascript jquery arrays json multidimensional-array

我需要动态创建一个数组,但我真的找不到解决方案......

基本上我需要的东西:一个与一个类型及其中的项目数量相关联的id。 然后,对于每个id,我需要添加一个可变数量的项目。

所以最后的例子必须是这样的:

id : 59 | type : combo_box | NbItem : 1
Item 1
name : text | value : test
name : icon | value : test.png

id : 60 | type : search_box | NbItem : 2
Item 1
name : text | value : Yahoo
name : icon | value : yahoo.png
name : weblink | value : yahoo.com

Item 2
name : text | value : Bing
name : icon | value : Bing.png
name : weblink | value : Bing.com

我再次确切地说它必须是动态的。我需要在执行期间添加,例如array[60][name][0] = text

修改

我正在尝试这样做,但它失败了:

var dropMenuArray;

var node = XMLDoc.getElementsByTagName("item")[itemCpt].getElementsByTagName("m_type")[0];
type = node.childNodes[0].nodeValue;

node = XMLDoc.getElementsByTagName("item")[itemCpt].getElementsByTagName("m_id")[XMLDoc.getElementsByTagName("item")[itemCpt].getElementsByTagName("m_id").length-1];
id = node.childNodes[0].nodeValue;

if ((type.indexOf('combo_button') != -1 && type.indexOf('combo_button_item') == -1) || type.indexOf('search_box') != -1) {
    dropMenuArray[id] = {
        Type: type,
        items: []
    };

    alert('Index : ' + id + '  -  Type : ' + type);
}

我的意思是没有警报,当我把数组创建放在commantary上时,我有警告弹出窗口。

4 个答案:

答案 0 :(得分:1)

我认为你想要的是这样一个数组:

var multi = [ { type: "combo_box", items: [ { name: "text", value: "Yahoo" } ] } ];

因此,要添加新条目,您需要:

var multi[newIndex] = { type: "new type", items: [] };

要向该项添加项目:

multi[newIndex].items.push({ name: "text", value: "Bing" });

您并不需要明确存储项目数,因为JavaScript“将为您保留”项目“列表的”长度“属性。因此,

var howMany = multi[someIndex].items.length;

答案 1 :(得分:0)

你可以做这样的事情(使用对象):

var array = {
    59: {
        type: 'combo_box',
        NbItem: 1,
        name: ['text', 'test', 'icon']
    },
    60: {
        type: 'search_box',
        NbItem: 2,
        name: ['text', 'yahoo', 'weblink']
    },
}

//can also use array[60]['name'][1] below:
alert(array[60].name[1]); // will alert 'yahoo' 
array[60].name[1] = 'google';
alert(array[60].name[1]); // will alert 'google'

答案 2 :(得分:0)

您可以使用关联数组:

function Item(text,icon,weblink) {
 this.text = text;
 this.icon = icon;
 this.weblink = weblink;
}

var arr = new Array();

var a = new Object();
a["id"] = 59;
a["type"] = "combo_box";
var arr_items = new Array();
arr_items.push( new Item("test","test.png") );
arr_items.push( new Item("Yahoo", "yahoo.png", "yahoo.com") );
a["items"] = arr_items;

arr.push( a );

... //carry on with other objects

答案 3 :(得分:0)

只需将数组放入数组...... 但你可能更喜欢对象。

这是你描述的结构,但我认为有一个更好的结构。

[
    {
        "id": 59,
        "type": "combo_box",
        "items": [
            [
                {
                    "name": "text",
                    "value": "test"
                },
                {
                    "name": "icon",
                    "value": "test.png"
                }
            ]
        ]
    },
    {
        "id": 60,
        "type": "search_box",
        "items": [
            [
                {
                    "name": "text",
                    "value": "Yahoo"
                },
                {
                    "name": "icon",
                    "value": "yahoo.png"
                },
                {
                    "name": "weblink",
                    "value": "yahoo.com"
                }
            ],
            [
                {
                    "name": "text",
                    "value": "Bing"
                },
                {
                    "name": "icon",
                    "value": "Bing.png"
                },
                {
                    "name": "weblink",
                    "value": "Bing.com"
                }
            ]
        ]
    },
]

可以通过获取项数组的length属性来获取NBItem事物。

这是更好的方式:

[
    {
        "id": 59,
        "type": "combo_box",
        "items": [
            {
                "text": "test",
                "icon": "test.png"
            }
        ]
    },
    {
        "id": 60,
        "type": "search_box",
        "items": [
            {
                "text": "Yahoo",
                "icon": "yahoo.png",
                "weblink": "yahoo.com"
            },
            {
                "text": "Bing",
                "icon": "Bing.png",
                "weblink": "Bing.com"
            }
        ]
    },
]

你可以做的最后一个改变是,如果元素的id是他在数组中的索引,你可以把它拿掉,因为当你循环遍历数组时,你已经有了一个包含它的变量。