按键对JavaScript对象排序

按键对JavaScript对象排序,javascript,Javascript,我有一个具有以下格式的对象集合: { { "articleId": "a0sf1000004najmAAA", "articleName": "A value for name", "footnote": "", "mainCat": "A Category 1", "subCat": "A SubCategory 1", }, { "articleId": "a0sf1000004najmAAA", "articleName":

我有一个具有以下格式的对象集合:

{
  {
    "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",
  },
}
经过缩减和分组后,我希望得到以下信息:

{
  "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
      }
    }
  }
}
现在,我可以返回所有按子类别分组的文章,但如何按主类别分组子类别

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]
  };
});

如有任何改进,将不胜感激。

此功能应能完成此工作

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
}
函数getGroupedByCategory(列表){ var ret={}
对于(var i=0;iIs:原始json数据中存在键入错误?即使我希望有数组,但没有括号。您想对它们进行分组,还是对它们进行排序?请注意,对象属性是无序的。您的标题提到了
排序
…您的代码没有排序…感谢@Obsidian Age编辑我的代码并澄清了b使用广告词汇。重点是实际分组,而不是排序。曼努埃尔·奥托给出的答案正是我所需要的。