如何建立新结构以便根据价值进行分组

时间:2018-11-03 22:24:55

标签: javascript arrays json sorting object

我有以下json:

[
    {
      'con': 'Usa',
      'city': 'ny',
      'town':'as'
    },
    {
      'con': 'Ger',
      'city': 'ber',
      'town':'zd'
    },
    {
      'con': 'Usa',
      'city': 'la',
      'town':'ss'
    }
  ]

并且我想将此json重新创建为新结构,以便不具有相同的'con'值,新结构应如下所示:

[{
        "con": "usa",
        "area": [{
            "city": "ny",
            "town": "as"
        }, {
            "city": "la",
            "town": "ss"
        }]
    },
    {
        "con": "ger",
        "area": [{
            "city": "ber",
            "town": "zd"
        }]
    }
]

您知道如何执行此操作。谢谢

1 个答案:

答案 0 :(得分:0)

一种替代方法是使用功能Array.prototype.reduce来对country进行分组,同时使用功能Object.values来提取分组的对象。

let arr = [{    'con': 'Usa',    'city': 'ny',    'town': 'as'  },  {    'con': 'Ger',    'city': 'ber',    'town': 'zd'  },  {    'con': 'Usa',    'city': 'la',    'town': 'ss'  }],
    result = Object.values(arr.reduce((a, {con, ...rest}) => {
      (a[con] || (a[con] = {con, area: []})).area.push(rest);
      return a;
    }, Object.create(null)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }