【问题标题】:How to manipulate a collection in Javascript?如何在 Javascript 中操作集合?
【发布时间】:2021-09-03 03:19:40
【问题描述】:

我正在尝试从另一个 javascript 对象中获取一个对象。我已经编写了以下代码来分组:

function execute(args) {
  const networkHospitals = args[0];
  cummulatedArray = _.groupBy(networkHospitals, "cityName");
  console.log(cummulatedArray);
}

这是我从上述代码中得到的示例输出:

{
  Trichy: [
    {
      hospitalName: 'asd',
      address_1: 'Friday',
    }
  ]
}

但我想以这种格式返回数据:

{
  "key": "Tirchy",
  "value": [{
    "hospitalName": "asd",
    "address_1": "Friday"
  }],
}

这是输入数据:

"networkHospitals": 
[{
  "hospitalName": "abc",
  "address_1": "Friday",
  "cityName": "Trichy"
}],

如果您能指导我如何操作我得到的 JSON 数据,我将不胜感激。

【问题讨论】:

  • 输入数据是什么?
  • 你试过什么?看起来您知道自己在做什么,但听起来您是在试图让其他人为您编程。
  • 如果输入对象中还有一个属性怎么办。那么它将如何存储在最终结果中?
  • @JustAMicrobe 我已经编辑了问题

标签: javascript object lodash javascript-objects


【解决方案1】:

cityName 分组后,映射组,并为每个组创建一个对象。如果需要,映射这些值,并从每个对象中省略 cityName 属性。

const networkHospitals = [{"hospitalName":"abc","address_1":"Friday","cityName":"Trichy"}]

const result = _.map(
  _.groupBy(networkHospitals, 'cityName'),
  (val, key) => ({
    key,
    value: val.map(o => _.omit(o, 'cityName'))
  })
)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

【讨论】:

    【解决方案2】:

    这就是lodash的分组方式,如果你想要不同的形状,你可以在最后做简单的变换

    identity
    
    collection = [
        {cityName: "A", hospitalName: "Hospital A1", address: 'adr A1'},
        {cityName: "A", hospitalName: "Hospital A2", address: 'adr A2'},
        {cityName: "A", hospitalName: "Hospital A3", address: 'adr A3'},
        {cityName: "B", hospitalName: "Hospital B1", address: 'adr B1'},
        {cityName: "C", hospitalName: "Hospital C1", address: 'adr C1'},
        {cityName: "C", hospitalName: "Hospital C2", address: 'adr C2'},
    ]
    groupped = _.groupBy(collection, 'cityName')
    console.log(Object.keys(groupped).map(
      cityName => ({key: cityName, value: groupped[cityName]})
    ));
    

    它会给你这个:

    [
      {
        key: 'A',
        value: [
          {
            address: 'adr A1',
            cityName: 'A',
            hospitalName: 'Hospital A1'
          },
          {
            address: 'adr A2',
            cityName: 'A',
            hospitalName: 'Hospital A2'
          },
          {
            address: 'adr A3',
            cityName: 'A',
            hospitalName: 'Hospital A3'
          }
        ]
      },
      {
        key: 'B',
        value: [
          {
            address: 'adr B1',
            cityName: 'B',
            hospitalName: 'Hospital B1'
          }
        ]
      },
      {
        key: 'C',
        value: [
          {
            address: 'adr C1',
            cityName: 'C',
            hospitalName: 'Hospital C1'
          },
          {
            address: 'adr C2',
            cityName: 'C',
            hospitalName: 'Hospital C2'
          }
        ]
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多