使用 underscore.js 对嵌套数组进行分组

Grouping a nested array with underscore.js

抱歉,如果这看起来像是重复的,但我已经尝试了其他答案,但我似乎无法得到正常工作的东西。我正在构建一个 AngularJS SPA,并且我有以下格式的数据:

"folders": [
  {
    "id": 1,
    "password": "WPAUGOR452",
    "year": 2013
  },
  {        
    "id": 2,
    "password": "WPAUGOR452",
    "year": 2013
  },
  {        
    "id": 3,
    "password": "DFGOERJ305",
    "year": 2014
  }

还有很多很多。

我希望将文件夹分组,这样就可以了:

"folders": [
  "2013": [
    "WPAUGOR452": [
      {
        "id": 1,
        "password": WPAUGOR452,
        "year": 2013,
      },
      {
        "id": 2,
        "password": WPAUGOR452,
        "year": 2013,
      }             
    ]
  ],
  "2014": [
    "DFGOERJ305": [
      {        
        "id": 3,
        "password": "DFGOERJ305",
        "year": 2014
      }
    ]
  ]
]

真实数据还有很多,但我已将其精简为真正想要分组的内容。目前每个文件夹都有一个密码和一个年份,我想让它们在几年内按密码分组,这样我就可以在UI中显示年份,然后所有适合特定密码的文件夹.

尽管还请注意,我想在 UI 中显示年份和密码(只有一次,在下面分组的项目中!)

如果需要任何进一步的细节,请询问。

这应该可以满足您的要求:

var result = _.chain(folders)
    .groupBy('year')
    .mapObject( year => _.groupBy(year, 'password'))
    .value();

以及具有完整功能定义的版本:

var result = _.chain(folders)
    .groupBy('year')
    .mapObject(function(year) {
        return _.groupBy(year, 'password');
    })
    .value();

解法先按年分组,再按年密码分组。