Добавление нового объекта во вложенный массив - PullRequest
0 голосов
/ 09 марта 2019

Я хочу добавить новый объект для каждого вложенного массива.Я вызываю эту функцию каждый раз, когда добавляю продукт в свой заказ:

  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, поэтому, к сожалению, я не могу инициализировать данные, включая новое свойство ...

, поэтому в каждом productRatePlanCharges должен быть 1 новый объект «количество».Как я могу добавить это поле для каждого productRatePlanCharges?Прямо сейчас я получаю: ОШИБКА

TypeError: Невозможно прочитать свойство 'productRatePlanCharges' из неопределенного

И как я могу убедиться, что я всегда добавляю это кпоследний элемент orderIntake?Не обращайте внимания на productRatePlans, в каждом заказе принимается только 1 ...

спасибо за вашу поддержку!

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

поскольку вы использовали Angular, вы, вероятно, тоже используете Typescript. Я рекомендую вам создать модель, подобную вашей входящей модели, и определить ваш quantity: number внутри объекта productRatePlanCharges. затем сопоставьте поступающие данные с вашей собственной моделью. поэтому у вас будет quantity=0 в вашей модели, чтобы вы могли изменить его позже в цикле.

Если вы хотите продолжить свой собственный путь, взгляните на это: Добавление нового атрибута (элемента) в объект JSON с использованием JavaScript

Нет проблем с добавлением элемента в текущую модель, почти как у вас, и проблема может быть в другом месте, поскольку ваша ошибка связана с существованием productRatePlanCharges!

как вы использовали для каждого, я предпочитаю использовать этот «элемент», и двойная итерация с i++; не очень хорошая идея для меня. это может быть лучше:

element.quantity = element.defaultQuantity;
0 голосов
/ 09 марта 2019

Здесь вам нужно создать объект 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;
    });

  }

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...