子数组和推送数据

时间:2015-03-10 18:42:19

标签: javascript arrays

你好我正在尝试创建一个动态数组,但我遇到了问题,我有一个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});请帮帮我

2 个答案:

答案 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)。

  1. 正如他所建议的那样,Items是一个数组:http://jsfiddle.net/nv76sd9s/1/

  2. 另一种方法是让Items成为一个对象,其ID为关键,值为值:http://jsfiddle.net/nv76sd9s/3/

  3. 这里的不同之处在于最终对象的结构以及您打算如何使用它。在我的#2链接中,对象更加结构化。它还会影响您迭代它们的方式。例如:

        var items = Invoice.Items;
        for (k in items) {
            var item = items[k];
            for (k in item) {
                console.log(k +': '+item[k]);
            }
        }