在属性上对数组进行分组,并使其归属于父数组

时间:2018-03-15 15:46:14

标签: javascript angular algorithm typescript

举个例子,我基本上试图从:

   [  
   {  
      'a':a1,
      'b':b2
   },
   {  
      'a':a1,
      'b':b5
   },
   {  
      'a':a3,
      'b':b4
   }
]

致:

 [  
   {  
      'group':'a1',
      'content':[  
         {  
            'a':a1,
            'b':b2
         },
         {  
            'a':a1,
            'b':b5
         }
      ],

   },
   {  
      'group':'a3',
      'content':[  
         {  
            'a':a3,
            'b':b4
         }
      ]
   }
]

因此,在单词重新格式化属性上的数组和组元素时,请a

2 个答案:

答案 0 :(得分:1)

使用lodash GroupBy有一种简单的方法

https://lodash.com/docs#groupBy

_.groupBy([
  {  
    'a':"a1",
    'b':"b2"
  },
  {  
    'a':"a1",
    'b':"b5"
  },
  {  
    'a':"a3",
    'b':"b4"
  }
 ], "a")

要分组的数组的第一个参数,第二个是要分组的迭代器,结果将分组在一个数组中,它不具有内容的前置。

{
   "a1":[
      {
         "a":"a1",
         "b":"b2"
      },
      {
         "a":"a1",
         "b":"b5"
      }
   ],
   "a3":[
      {
        "a":"a3",
        "b":"b4"
      }
   ]
}

看看这是否有助于您前进,如果没有,请告诉我

答案 1 :(得分:0)

如果只需要该分组数组,则可以使用reducer实现。

`let group = data.reduce((r, a) => {
 r[a.a] = [...r[a.a] || [], a];
 return r;
 }, {});`

var data =   [  
   {  
      'a':'a1',
      'b':'b2'
   },
   {  
      'a':'a1',
      'b':'b5'
   },
   {  
      'a':'a3',
      'b':'b4'
   }
]
let group = data.reduce((r, a) => {
 r[a.a] = [...r[a.a] || [], a];
 return r;
}, {});
console.log("group", group);