2017-08-27 71 views
1

一個JavaScript對象,我有以下格式對象的集合:主鍵排序

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

任何改進將不勝感激。

+1

這是原始json數據中的拼寫錯誤嗎?即使我期望有一個數組,也沒有括號。 – styfle

+0

你想分組嗎,或者你想分類嗎?注意對象屬性是無序的。 – Bergi

+0

您的標題提到'排序'...您的代碼不排序... –

回答

2

該功能應該完成這項工作。

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 
}