【问题标题】:Map objects properties and convert to string映射对象属性并转换为字符串
【发布时间】:2019-03-10 04:14:00
【问题描述】:

我有这个数据:

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"

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: javascript angular typescript ecmascript-6


【解决方案1】:

您可以尝试使用Array.forEachArray.mapArray.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);

【讨论】:

  • @firasKoubaa 请记住,这种方法会改变 myInputArray
【解决方案2】:

基本思想是循环遍历您的myInputArray 数组并将commercialRanges 简化为字符串;您还需要使用循环。

我建议在您的myInputArray 上使用Array.prototype.reduce 方法,然后在commercialRanges 数组上使用Array.prototype.map,因为这是实现这一目标的最简单/最优雅的方法。您还可以对两个循环使用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(',')
  })
)

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多