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

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"
-5
firasKoubaa 4 Окт 2018 в 20:21

2 ответа

Лучший ответ

Вы можете попробовать следовать, используя 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);
0
Nikhil Aggarwal 4 Окт 2018 в 17:30

Основная идея состоит в том, чтобы перебрать ваш массив 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
Patryk Cieszkowski 4 Окт 2018 в 17:47