2014-02-19 207 views
0

所以,通過javascript中的屬性對JSON數組進行排序?

這是一個非常簡化的版本,我的JSON數據:

[ 
    { 
    "category": "Financial", 
    "item": "DIAS" 
    }, 
    { 
    "category": "Social", 
    "item": "Andrew Barnett Explains..." 
    }, 
    { 
    "category": "Financial", 
    "item": "FP Sales" 
    } 
] 

,我要像下面這樣安排的:

[ 
    { 
    "category": "Financial", 
    "items": [ 
     { 
     "item": "DIAS" 
     }, 
     { 
     "item": "FP Sales" 
     } 
    ] 
    }, 
    { 
    "category": "Social", 
    "items": [ 
     { 
     "item": "Andrew Barnett Explains..." 
     } 
    ] 
    } 
] 

什麼是最好的方式(性能明智的)來實現這一目標?我確定有比使用兩個循環更好的方法嗎?

感謝

+0

嘗試建立類似'{「金融「:[」DIAS「,」FP銷售「],」社交「:[」Andrew Barnett解釋「,...],...}作爲中間結果。 – Bergi

+0

你問性能嗎,還是你問怎麼做?兩個循環有什麼問題? –

+0

我在問如何以最好的方式做到這一點。 – user1788175

回答

0

我已經把東西小提琴的作品:http://jsfiddle.net/Hnj2s/

var temp = [ 
    { 
    "category": "Financial", 
    "item": "DIAS" 
    }, 
    { 
    "category": "Social", 
    "item": "Andrew Barnett Explains..." 
    }, 
    { 
    "category": "Financial", 
    "item": "FP Sales" 
    } 
]; 

var output = []; 
var lookup = {}; 
for(var i=0; i<temp.length; i+=1){ 
    var cat = temp[i].category; 
    if(!lookup[cat]){ 
     lookup[cat] = { 
      category: cat, 
      items: [] 
     }; 
     output.push(lookup[cat]);   
    } 
    lookup[cat].items.push({ 
     item: temp[i].item 
    }); 
} 

console.log(output); 

我不知道你如何定義這裏最好的方式,你可能需要具體。然而,這種方法通過項目的單一循環。

+1

謝謝。在這裏學到了一些東西。 – user1788175

0
var data = [ 
    { 
    "category": "Financial", 
    "item": "DIAS" 
    }, 
    { 
    "category": "Social", 
    "item": "Andrew Barnett Explains..." 
    }, 
    { 
    "category": "Financial", 
    "item": "FP Sales" 
    } 
]; 
var newData = {}; 
var res = new Array(); 
$(data).each(function() { 
    var cat = this.category; 
    if (newData[cat] === undefined) { 
     newData[cat]={}; 
     newData[cat].category = cat; 
     newData[cat].Items = [{"Item": this.item}]; 
     res.push(newData[cat]); 
    } 
    else { 
     newData[cat].Items.push({"Item": this.item}); 
    } 
}); 

編輯: DEMO:http://jsfiddle.net/dPhg7/

0

使用下劃線方法

_.groupBy 

你能做到這樣: jsfiddle

相關問題