简体   繁体   English

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

[英]Group and Sort object with Underscore.js

I'm trying to apply group and sort on objects. 我正在尝试对对象进行分组和排序。

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"
}]

I like to group the data by company and then sort by office (ascending order). 我喜欢按company对数据分组,然后按办公室排序(升序)。 I'm using underscore.js to group and it returns similar to object below. 我正在使用underscore.js进行分组,并且返回类似于下面的对象。

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

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

Now each object inside the grouped array has properties including office, I can't get the results I need to sort the data by it so we have an ascending order. 现在,分组数组中的每个对象都具有包括office在内的属性,我无法获得按其对数据进行排序所需的结果,因此我们具有升序。

I have tried below method but doesn't seem to work. 我尝试了下面的方法,但似乎没有用。

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

Anyone know a solution for this? 有人知道解决方案吗?

Why not sort and then group? 为什么不排序然后分组? Then the result will be a collection grouped by company name each holding sorted array of objects (asc. by office name) 然后,结果将是一个按公司名称分组的集合,每个集合都包含排序的对象数组(按办公室名称的升序)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM