Angular: невозможно восстановить массив объектов - PullRequest
0 голосов
/ 01 апреля 2020

Я хочу изменить и заново сгенерировать массив объектов. Пожалуйста, проверьте мой созданный stackblitz.com

Пожалуйста, просмотрите дамп данных:

data  = [
    {
  "player settings": [
    {
      "id": 1,
      "labelName": "site language",
      "labelValue": [
        {
          "id": 1,
          "languageName": "ARABIC",
          "language": "لغتك",
          "languageCode": "AE"
        },
        {
          "id": 2,
          "languageName": "CHINESE",
          "language": "你的语言",
          "languageCode": "ZH"
        },
      ],
      "dataType": "DD",
      "selectedData": "2"
    },
    {
      "id": 2,
      "labelName": "subtitle language",
      "labelValue": [
        {
          "id": 1,
          "languageName": "ARABIC",
          "language": "لغتك",
          "languageCode": "AE"
        },
        {
          "id": 2,
          "languageName": "CHINESE",
          "language": "你的语言",
          "languageCode": "ZH"
        },

      ],
      "dataType": "DD",
      "selectedData": "1"
    },

  ]
},
{
  "channel": [
    {
      "id": 11,
      "labelName": "channel label",
      "dataType": "TX",
      "selectedData": "jhfh"
    }
  ]
},
{
  "others": [
    {
      "id": 16,
      "labelName": "others label",
      "dataType": "TX",
      "selectedData": "dhgdhg"
    }
  ]
}
];

Как я могу изменить и заново сгенерировать объект при следующих условиях:

если dataType === 'DD', то конвертировать selectedData в число.

Я написал приведенный ниже код, но застрял здесь и получил ошибку ERROR Error: this.data[key].forEach is not a function:

for (let key in this.data) {
    this.data[key].forEach(obj => {
      if (obj.dataType === "DD") {
        obj.selectedData = +(obj.selectedData || 0)
      }
    });
 }

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Каждый элемент массива является объектом. И у объекта нет forEach() метода. Вы можете попробовать следующую функцию

ngOnInit() {
  this.data.forEach(item => {
    for (const key in item) {   // <-- `item.forEach()` won't work because it's an object
      item[key].forEach(subItem => {
        if (subItem.dataType === 'DD') {
          subItem.selectedData = +(subItem.selectedData || 0);
        }
      })
    }
  });
  console.log(this.data);
}

Я изменил ваш Stackblitz

2 голосов
/ 01 апреля 2020

Попробуйте это

this.data  = [ { "player settings": [ { "id": 1, "labelName": "site language", "labelValue": [ { "id": 1, "languageName": "ARABIC", "language": "لغتك", "languageCode": "AE" }, { "id": 2, "languageName": "CHINESE", "language": "你的语言", "languageCode": "ZH" }, ], "dataType": "DD", "selectedData": "2" }, { "id": 2, "labelName": "subtitle language", "labelValue": [ { "id": 1, "languageName": "ARABIC", "language": "لغتك", "languageCode": "AE" }, { "id": 2, "languageName": "CHINESE", "language": "你的语言", "languageCode": "ZH" }, ], "dataType": "DD", "selectedData": "1" }, ] }, { "channel": [ { "id": 11, "labelName": "channel label", "dataType": "TX", "selectedData": "jhfh" } ] }, { "others": [ { "id": 16, "labelName": "others label", "dataType": "TX", "selectedData": "dhgdhg" } ] } ];

for (let key in this.data) {
    Object.values(this.data[key])[0].forEach(obj => {
      if (obj.dataType === "DD") {
        obj.selectedData = +(obj.selectedData || 0)
      }
    });
 }
 
 console.log(this.data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...