使用Underscore.js对对象进行分组和排序

时间:2015-06-08 18:10:07

标签: javascript underscore.js

我试图对对象进行分组和排序。

var emplData = [{
    "company": "companyA",
    "title": "positionA",
    "office": "Boston",
    "first-name": "Mike",
    "last-name": "Bloom",
    "profile-url": "url"
}, {
    "company": "companyA",
    "title": "positionD",
    "office": "Amsterdam",
    "first-name": "Adam",
    "last-name": "Smart",
    "profile-url": "url"
}, {
    "company": "companyB",
    "title": "positionB",
    "office": "Toronto",
    "first-name": "Tina",
    "last-name": "Carmichael",
    "profile-url": "url"
}, {
    "company": "companyB",
    "title": "positionA",
    "office": "Chicago",
    "first-name": "Seth",
    "last-name": "Big",
    "profile-url": "url"
}, {
    "company": "companyC",
    "title": "positionC",
    "office": "St. Louis",
    "first-name": "Carla",
    "last-name": "Elsas",
    "profile-url": "url"
}]

我喜欢按company对数据进行分组,然后按办公室排序(升序)。我使用underscore.js进行分组,它返回类似于下面的对象。

var grpData = _.groupBy(emplData, 'company');

  {
    CompanyA:[{object1}, {object2} etc.],
    CompanyB: [{object1}, {object2} etc.],
    CompanyC: [{object1}, {object2} etc.]
  }

现在分组数组中的每个对象都有包含office的属性,我无法得到我需要对数据进行排序的结果,所以我们有一个升序。

我尝试过以下方法,但似乎没有效果。

var srtData = _.sortBy(grpData , function (i) {
    $(i).each(function (i2, val) {
        return val.office;
    });
});

任何人都知道这方面的解决方案吗?

1 个答案:

答案 0 :(得分:6)

为什么不排序然后分组?然后,结果将是按公司名称分组的集合,每个集合都包含已排序的对象数组(按办公室名称)

var grpData = _.groupBy(_.sortBy(emplData, "office"), 'company');