2015-05-20 74 views
0

我想排序,然後切片一組JavaScript對象。我已成功切分數據,但排序返回的是既不按類別也不按字母順序排序的類別列表。Javascript對象排序和切片

我的CSV看起來是這樣的:

category,date_calc,value,YYYY,MM 
string1,2011-08-01,46440.16,2011,8 
string2,2013-03-01,68249.72,2013,3 
string1,2014-01-01,4285,2014,1 
string3,2012-03-01,47646.82,2012,3 
... 

這是我的代碼:

d3.csv("data/ncc_category.csv", function(error, csv) { 
    var data = d3.nest() 
    .key(function(d) { return d.category;}) 
    .rollup(function(d) { return d3.sum(d, function(g) {return g.value; }); }).entries(csv) 

    var sorted = data.sort(function (a, b) { 
     return a.value - b.value; 
    }).reverse(); 

    var top10 = sorted.slice(0, 10); // slice 
     console.log(top10); 
}); 

編輯: 在data第4個對象屏幕抓取。

Console output for data:

的第4個對象屏幕抓取在top10

Console output for top10

+0

確保'data'包含你認爲它包含(以'console.dir (數據);'例如)。你也可以通過切換'a'和'b'去除'.reverse()'。 – sebnukem

+0

'數據'是好的,並正確地滾動,其只是排序不工作,就好像它沒有在'b.value - a.value;'註冊'值' - 感謝'reverse'的幫助。 – woodbine

+0

您可能想要將'value'解析爲一個數字(例如,在其前面放置一個「+」)。 –

回答

0

好了,這是在列命名一個有益的教訓,已經命名我的專欄value,我沒挑因爲當d3構造一個捲起的對象數組時,它給出主列名稱key和總和列名稱values。有一次,我在原來的CSV我可以看到這個問題改變了列名,我還使用了排序代碼這裏建議:Sort array of objects by string property value in JavaScript

d3.csv("data/ncc_category.csv", function(error, csv) { 
var data = d3.nest() 
.key(function(d) { return d.category;}) 
.rollup(function(d) { return d3.sum(d, function(g) {return +g.total_spend; }); }).entries(csv) 

var sorted = data.sort(function (a, b) { 
    if (a.values < b.values) { 
     return 1; 
} 
    if (a.values > b.values) { 
     return -1; 
    } 
    // a must be equal to b 
    return 0; 
}); 
console.dir(sorted); 

var top10 = sorted.slice(0, 10); // slice the first 10 
    console.dir(top10); 
});