你好我正在尝试创建一个动态数组,但我遇到了问题,我有一个onclick
事件来创建发票所以当点击启动时我就拥有它
var $boletos=new Array();
function onclick(value){
if($invoice.length==0){
$invoice.push({"items":{}});
$invoice[0].items[0]={"ID":this.person.ID,"other":value};
}else{
//here i do a "for" to create new invoice index, or new item
....
}
}
我想要的结果就像是
Invoice{
0:{ items{
0:{ ID:"123",other:"xxx"}
1:{ ID:"234",other:"xxx"}
2:{ ID:"233",other:"xxx"}
}
}
1:{ items{
0:{ ID:"1323",other:"yyy"}
1:{ ID:"1323",other:"xyyxx"}
2:{ ID:"1213",other:"yyyy"}
}
}
2:{ items{
0:{ ID:"12323",other:"zz"}
1:{ ID:"1223",other:"zz"}
2:{ ID:"1123",other:"zz"}
}
}
}
但是我只能做一个对象,我不能调用push事件,因为它是一个对象,而不是一个数组,所以也许我需要做类似的事情
$invoice[0].items[0].push({"ID":this.person.ID,"other":value});
请帮帮我
答案 0 :(得分:0)
我并不完全理解您在此处使用的逻辑,但基本上您应该使用push()
向数组中添加新项目,而不是数字索引。 items
属性也应该是一个数组,而不是一个对象:
var $boletos = [];
function onclick(value){
if($boletos.length === 0 || shouldStartANewInvoice) {
$boletos.push({ items: [] });
}
$boletos[$boletos.length - 1].items.push({
ID: this.person.ID,
other:value
});
}
答案 1 :(得分:0)
只需将上下文和示例添加到@ JLRishe的答案中。
根据您的发票使用情况,有两种方法可以执行此操作。例如,如果我在C#中提交服务器端,我会将它更像一个对象(#2)。否则,数组方法可以正常工作(#1)。
正如他所建议的那样,Items是一个数组:http://jsfiddle.net/nv76sd9s/1/
另一种方法是让Items成为一个对象,其ID为关键,值为值:http://jsfiddle.net/nv76sd9s/3/
这里的不同之处在于最终对象的结构以及您打算如何使用它。在我的#2链接中,对象更加结构化。它还会影响您迭代它们的方式。例如:
var items = Invoice.Items;
for (k in items) {
var item = items[k];
for (k in item) {
console.log(k +': '+item[k]);
}
}