将新对象添加到嵌套数组中

时间:2019-03-09 04:51:52

标签: javascript angular

我想为每个嵌套数组添加一个新对象。每当我将产品添加到订单中时,我都会调用此函数:

  add2order(productID, productName, productRatePlans) {
    this.orderIntake.push({ productID, productName, productRatePlans });
    let i = 0;
    this.orderIntake[0].productRatePlans[0].productRatePlanCharges.forEach(element => {
      i++;
      this.orderIntake[0].productRatePlans[0].productRatePlanCharges[
        i
      ].quantity = this.orderIntake[0].productRatePlans[0].productRatePlanCharges[
        i
      ].defaultQuantity;
    });

  }

这是服务器的示例响应:

{
            "id": "8adc8f996928b9a4016929c59b943a8f",
            "sku": "SKU-00006778",
            "Partner_Account_ID__c": null,
            "productRatePlans": [
                {
                    "id": "8adce4216928c28d016929c59bff3372",
                    "status": "Active",
                    "name": "Enterprise",
                    "description": null,
                    "effectiveStartDate": "2016-02-26",
                    "effectiveEndDate": "2029-02-26",
                    "productRatePlanCharges": [
                        {
                            "id": "8adc8f996928b9a4016929c59d183a92",
                            "name": "USAGE_COUNTER_2",
                            "type": "Usage",
                            "model": "Volume",
                            "uom": "Each",
                            "pricingSummary": [
                                "Up to 5000 Each: USD0 flat fee"
                            ],
                            "pricing": [
                                {
                                    ...
                                }
                            ],
                            "defaultQuantity": null,
                            "applyDiscountTo": null,
                            "discountLevel": null,
                            "discountClass": null,
                            ...
                            "financeInformation": {
                                ..,
                            }
                        }
                    ]
                }
            ],
            "productFeatures": [
                {
                    ...
                }
            ]
        }

正在以这种方式从外部REST后端检索数据,所以很遗憾,我无法初始化包括new属性的数据...

因此,在每个productRatePlanCharges中应该有1个新对象“ quantity”。 如何将此字段添加到每个productRatePlanCharges? 现在,我得到:错误

  

TypeError:无法读取未定义的属性'productRatePlanCharges'

如何确保始终将其添加到最后一个orderIntake元素?别介意productRatePlans,每个订单中只有1个订单...

感谢您的支持!

2 个答案:

答案 0 :(得分:0)

在这里,您必须使用如下所示的初始化数组创建productDetails对象,以免出现错误。

add2order(productID, productName, productRatePlans) {

   // Create object like below
   let productDetails = { productID : productID, productName : productName, productRatePlans : productRatePlans 
   }   

    this.orderIntake.push(productDetails);

    let i = 0;
    this.orderIntake[0].productRatePlans[0].productRatePlanCharges.forEach(element => {
      i++;
      this.orderIntake[0].productRatePlans[0].productRatePlanCharges[
        i
      ].quantity = this.orderIntake[0].productRatePlans[0].productRatePlanCharges[
        i
      ].defaultQuantity;
    });

  }

希望这会有所帮助!

答案 1 :(得分:0)

在使用Angular时,您可能也使用了Typescript。我建议您创建一个模型,例如传入模型,并在productRatePlanCharges对象中定义quantity: number。然后将传入的数据映射到您自己的模型。因此您的模型中将有一个quantity=0,以后可以在循环中进行更改。

如果您想继续自己的方式,请看以下内容: Add new attribute (element) to JSON object using JavaScript

几乎可以像您一样向当前模型添加元素,问题可能出在其他地方,因为您的错误是指productRatePlanCharges的存在!

就像您以前使用的那样,我更喜欢使用'element'并用i++;进行两次迭代对我来说不是一个好主意。 可能会更好:

element.quantity = element.defaultQuantity;