简体   繁体   English

按键对JavaScript对象进行排序

[英]Sort a JavaScript object by key

I've got a collection of objects with the following format: 我收集了以下格式的对象:

{
  {
    "articleId": "a0sf1000004najmAAA",
    "articleName": "A value for name",
    "footnote": "",
    "mainCat": "A Category 1",
    "subCat": "A SubCategory 1",
  }, {
    "articleId": "a0sf1000004najmAAA",
    "articleName": "A value for name",
    "footnote": "",
    "mainCat": "A Category 1",
    "subCat": "A SubCategory 2",
  },
}

After reduction and grouping I would like to have the following: 经过归约和分组后,我希望获得以下内容:

{
  "A Category 1": {
    "A SubCategory 1": {
      {
        some items belonging to SubCat 1 and Cat 1
      }
    },
    "A SubCategory 2": {
      {
        some items belonging to SubCat 2 and Cat 1
      }
    }
  }
}

For now, I'm able to return all my single article grouped by sub-category, but how can I group my sub-categories by their main category? 现在,我可以按子类别归还所有我的单个文章,但是如何按子类别将其归类呢?

var catalog = data;

var groupBySubCat = catalog.reduce(function(obj, item) {
  obj[item.subCat] = obj[item.subCat] || [];
  obj[item.subCat].push(item);
  return obj;
}, {});

var groups = Object.keys(groupBySubCat).map(function(key) {
  return {
    subCat: key,
    tests: groupBySubCat[key]
  };
});

var maingroups = Object.keys(groupBySubCat).map(function(key) {
  return {
    subCat: key,
    tests: groupBySubCat[key]
  };
});

Any improvement would be appreciated. 任何改进将不胜感激。

This function should do the job. 此功能可以完成工作。

function getGroupedByCategory(list){
    var ret = {}
    for(var i=0;i<list.length;i++){
        var mainCat = list[i].mainCat
        var subCat = list[i].subCat

        if(!ret[mainCat]) // check if mainCat key exists
            ret[mainCat] = {} // if not create new object

        if(!ret[mainCat][subCat]) // check if subCat exists in mainCat object
            ret[mainCat][subCat] = [] // if not create new list

        ret[mainCat][subCat].push(list[i]) // push current element in the designated list
    }
    return ret
}

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

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