Свойства объектов карты и преобразовать в строку - PullRequest
0 голосов
/ 04 октября 2018

у меня есть эти данные:

let myInputArray = [
    {
        "id": 1,
        "commercialRanges": [
          {
            "rangeId": "305",
            "rangeName": "FIXE"
          },
          {
            "rangeId": "306",
            "rangeName": "POSTPAID"
          },
        ],
        "active": true,
        "pefName": "Alertes",
        "roles": "ADVISOR",
        "equipmentTypes": "PC",
      },
      ...
      {
        "id": 1523,
        "commercialRanges": [
          {
            "rangeId": "700",
            "rangeName": "POSTPAID"
          },
          {
            "rangeId": "500",
            "rangeName": "PREPAID"
          },
        ]
        ,
        "active": true,
        "pefName": "Alertes",
        "roles": "ADVISOR",
        "equipmentTypes": "PC",
      },
    ]

Я хочу обновить мои данные: преобразование атрибута "commercialRanges" из его формата (массива объектов) -> в простую строку: (которая соединяетразличные значения " rangeName ")

Мой результирующий массив будет выглядеть примерно так:

myResultArray = [
{
    "id": 1,
    "commercialRanges": "FIXE,POSTPAID",
    "active": true,
    "pefName": "Alertes",
    "roles": "ADVISOR",
    "equipmentTypes": "PC",
  },
  ...
  {
    "id": 1523,
    "commercialRanges": "POSTPAID,PREPAID",
    "active": true,
    "pefName": "Alertes",
    "roles": "ADVISOR",
    "equipmentTypes": "PC",
  },
]

В результате я должен преобразоватьвстроенный объект "commercialRanges"

"commercialRanges": [
      {
        "rangeId": "305",
        "rangeName": "FIXE"
      },
      {
        "rangeId": "306",
        "rangeName": "POSTPAID"
      },
    ]

до :

"commercialRanges": "FIXE,POSTPAID"

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Основная идея состоит в том, чтобы перебрать ваш массив myInputArray и уменьшить commercialRanges до строки;для чего вам нужно будет также использовать цикл.

Я бы предложил использовать метод Array.prototype.reduce на вашем myInputArray, а затем Array.prototype.map на commercialRanges массиве, поскольку это был бы самый простой / самый элегантный способ достижения этого.Вы также можете использовать map для обоих циклов, а также reduce.На самом деле до вас.Вот мой ход

let myInputArray = [
  {
      "id": 1,
      "commercialRanges": [
        {
          "rangeId": "305",
          "rangeName": "FIXE"
        },
        {
          "rangeId": "306",
          "rangeName": "POSTPAID"
        },
      ],
      "active": true,
      "pefName": "Alertes",
      "roles": "ADVISOR",
      "equipmentTypes": "PC",
    },
    ...
    {
      "id": 1523,
      "commercialRanges": [
        {
          "rangeId": "700",
          "rangeName": "POSTPAID"
        },
        {
          "rangeId": "500",
          "rangeName": "PREPAID"
        },
      ]
      ,
      "active": true,
      "pefName": "Alertes",
      "roles": "ADVISOR",
      "equipmentTypes": "PC",
    },
  ]

const myInputString = myInputArray.reduce((arr, obj) => [
  ...arr,
  {
    ...obj,
    commercialRanges: obj.commercialRanges.map(rObj => rObj.rangeName).join(',')
  }
], [])

Вариант 2: зацикливание обоих массивов с помощью Array.prototype.map

const myInputString = myInputArray.map(obj => ({
    ...obj,
    commercialRanges: obj.commercialRanges.map(rObj => rObj.rangeName).join(',')
  })
)
0 голосов
/ 04 октября 2018

Вы можете попробовать следующие действия, используя Array.forEach , Array.map и Array.join

let myInputArray = [{"id":1,"commercialRanges":[{"rangeId":"305","rangeName":"FIXE"},{"rangeId":"306","rangeName":"POSTPAID"}],"active":true,"pefName":"Alertes","roles":"ADVISOR","equipmentTypes":"PC"}];
  
myInputArray.forEach(o => o.commercialRanges = o.commercialRanges.map(r => r.rangeName).join(','));
console.log(myInputArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...