创建动态数组

时间:2012-02-27 07:42:32

标签: javascript jquery

我需要创建一个带循环的动态数组..但我似乎无法获得所需的结果。

我想要的数组是:

{
    "CategoryName": "somecategoryname",
    "Date": "02-17-2012",
    "Id": 24,
    "ProductToHide": [
        {
            "IsHide": true,
            "ProductId": "someid"
        }
    ],
    "ProductsToAdd": [
        {
            "MealSequence": "S1",
            "ProductId": "Someid"
        },
        {
            "MealSequence": "S2",
            "ProductId": "Snack_11"
        }
    ],
    "UserId": "1"
}

我正在使用以下功能添加产品:

addProduct: function(id){
        var tempArr = [];
        $.each(this.mCData.ChildCategories, function(i, item){
            $.each(item.PList, function(j, jsonPr){
                if (jsonPr.TID == id){
                    addProduct = new mealTypeProduct();
                    addProduct.data = jsonPr;
                    tempArr = addProduct.modifyProduct();
                }   
            })
        })

    //  queryStr = {"add" : tempArr};
    //  this.modificationArray.push(queryStr);
        this.modificationArray['add'].push(tempArr);    
        console.log(this.modificationArray);
    }

它给了我以下错误:

this.modificationArray.add.push is not a function
this.modificationArray['add'].push(tempArr);

初始化按以下方式完成:

var mealType = {
    chosenDate: new Date(), tabViewHtml: '',
    modificationArray: [], saveArray: [],
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这一行:

                tempArr = addProduct.modifyProduct();

用新值替换 tempArr,因此在$.each调用结束时,它将获得最后一个匹配产品的值(可能不是数组)而不是成为所有这些的数组。如果这就是你想要的那么那不是问题。

至于你引用的实际错误:this.modificationArray是什么类型的东西?它是否有一个名为add的成员?该成员是否具有push()功能?它是否正确初始化,还是未初始化?如果是后者,则存在问题:您需要初始化它才能调用push()

更新:如果this.modificationArray初始化为[],就像在新的示例代码中那样,那么它就是一个数组本身;它没有add成员。代码应该说this.modificationArray.push(tempArr)

或者,如果您确实需要add成员,则应将this.modificationArray初始化为modificationArray : {add:[]}