首页 > 解决方案 > 希望按子数组中的值对数组进行分组

问题描述

尝试解析一个具有一堆相同“辅助ID”的数据集,以便我可以将它们分组并一起迭代。

在英语中,我试图做的是“选择字段值唯一的所有项目的唯一组”

'use strict';

const data = [{
    Group: 'A',
    Name: 'SD'
}, {
    Group: 'B',
    Name: 'FI'
}, {
    Group: 'A',
    Name: 'MM'
}, {
    Group: 'B',
    Name: 'CO'
}];

let unique = [...new Set(data.map(item => item.Group))];
console.log(unique);

这给出了 ["A"],["B"]

但我要找的是

{
  A: [ "SD","MM" ],
  B: [ "FI","CO" ],
}

标签: javascriptecmascript-6vuejs2

解决方案


为此,我会使用array.reduce而不是array.map因为您实际上希望返回的是一个值,而不是修改后的数组,当您想将数组从字面上减少为单个输出值时,reduce 方法是完美的,在您的情况下唯一组的对象。也许尝试这样的事情:

let unique = data.reduce((acc, { Group, Name }) => {
  if (!(acc.hasOwnProperty(Group))) {
    acc[Group] = [Name];
  } else {
    acc[Group].push(Name);
  }; 
  return acc;
}, {});

我还为此添加了一支笔:https ://codepen.io/anon/pen/BGpgdz?editors=1011 ,这样您就可以看到它的工作原理。

希望这可以帮助!


推荐阅读