根据其类别组合数组子类别的对象

时间:2019-02-01 07:57:08

标签: javascript ecmascript-6 ecmascript-5

问:这是多个对象(类别和子类别)的数组。

let cats = [
  { cat: 'letter', subCat: 'A'}, 
  { cat: 'letter', subCat: 'B'}, 
  { cat: 'number', subCat: '2'}, 
  { cat: 'number', subCat: '3'}, 
  { cat: 'number', subCat: '4'}, 
  { cat: 'other', subCat: '+'}, 
]

需要像这样转换此cats对象-

cats = [
    { cat: 'letter', subCat: ['A', 'B'] },
    { cat: 'number', subCat: ['2', '3', '4'] },
    { cat: 'other', subCat: ['+'] }
  ]

1 个答案:

答案 0 :(得分:1)

您可以使用简单的reduce

System.getProperty("line.separator")

创建一个累加器,每个唯一的let cats=[{cat:'letter',subCat:'A'},{cat:'letter',subCat:'B'},{cat:'number',subCat:'2'},{cat:'number',subCat:'3'},{cat:'number',subCat:'4'},{cat:'other',subCat:'+'},] const merged = cats.reduce((a, {cat, subCat})=>{ a[cat] = a[cat] || {cat, subCat:[]} a[cat]["subCat"].push(subCat) return a; },{}) console.log(Object.values(merged))cat,最终数组中所需的对象为key,如下所示:

value

然后使用Object.values仅获取数组中的值。

您可以一次性完成全部操作:

{
  "letter": {
    "cat": "letter",
    "subCat": [
      "A",
      "B"
    ]
  }
}