JavaScript 中按字符串属性值对对象数组进行分组?

rel*_*don 4 javascript ecmascript-6

我讨厌这个对象数组,每个对象都有一个日期,我希望能够将这些对象分组为月份。有没有办法转换这个

var data  = [
  { date: "2016-08-13",...},
  { date: "2016-07-23",...},
  { date: "2016-08-11",...},
  { date: "2016-08-10",...},
  { date: "2016-07-20",...},
  { date: "2016-07-21",...},
]
Run Code Online (Sandbox Code Playgroud)

变成这样的东西

var data  = [
  [{ date: "2016-08-13",...},
  { date: "2016-08-11",...},
  { date: "2016-08-10",...}],
  [{ date: "2016-07-20",...},
  { date: "2016-07-21",...},
  { date: "2016-07-23",...}[
]
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

您可以在哈希表中获取年份和月份组的字符串的一部分,并为每个组获取一个新数组,并将该数组放入结果集中。

var data = [{ date: "2016-08-13" }, { date: "2016-07-23" }, { date: "2016-08-11" }, { date: "2016-08-10" }, { date: "2016-07-20" }, { date: "2016-07-21" }],
    hash = Object.create(null),
    result = [];

data.forEach(function (o) {
    var key = o.date.slice(0, 7);
    if (!hash[key]) {
        hash[key] = [];
        result.push(hash[key]);
    }
    hash[key].push(o);
});

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