我需要动态创建一个数组,但我真的找不到解决方案......
基本上我需要的东西:一个与一个类型及其中的项目数量相关联的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上时,我有警告弹出窗口。
答案 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是他在数组中的索引,你可以把它拿掉,因为当你循环遍历数组时,你已经有了一个包含它的变量。