2014-02-19 69 views
3

我有保持像這樣4個對象屬性的對象的陣列的數據集的陣列:D3排序對象的2個對象屬性

var dataset = [{ 
    key: 0, 
    brand: "A", 
    value: 10, 
    size: 10 
}, { 
    key: 1, 
    brand: "B", 
    value: 11, 
    size: 10 
}, { 
    key: 2, 
    brand: "C", 
    value: 12, 
    size: 9 
}, { 
    key: 3, 
    brand: "D", 
    value: 13, 
    size: 9 
}, { 
    key: 4, 
    brand: "E", 
    value: 14, 
    size: 9 
}, { 
    key: 5, 
    brand: "G", 
    value: 15, 
    size: 9 
}, { 
    key: 6, 
    brand: "F", 
    value: 16, 
    size: 9 
}, { 
    key: 7, 
    brand: "H", 
    value: 17, 
    size: 9 
}, { 
    key: 8, 
    brand: "I", 
    value: 18, 
    size: 9 
}, { 
    key: 9, 
    brand: "J", 
    value: 19, 
    size: 9 
}, { 
    key: 10, 
    brand: "K", 
    value: 20, 
    size: 9 
}]; 

然後我建立一個圖表,D3表示value爲水平線和size作爲坐在線上的氣泡(請參閱http://jsfiddle.net/G74Aq/4/)。

除了key屬性之外,我還爲每個上述對象屬性添加了一個排序函數,該屬性用於排序中的鍵函數。這在按名稱和值進行排序時工作正常,但是當按大小排序線條和排列不同的排序時。請注意,只有當鍵值上升到10時,纔會發生這種情況,這表明字典排序問題,我認爲我可以通過在< 10(其中沒有改變任何內容)之前的每個鍵號前面加0來繞過。

我的問題是:即使應用的排序方法都使用相同的鍵函數,爲什麼不同的元素以不同的方式排序呢?自然,我怎樣才能調整排序功能?

回答

1

試着強迫它按數字值而不是字符串排序。一元運算符+可以完成該操作。

function getSortFunction(propertyName) { 
    return function(a, b) { 
     return +(a[propertyName]) > +(b[propertyName]); 
    } 
} 

dataset.sort(getSortFunction("size")); 
+0

它絕對減少了代碼,但似乎不影響排序問題。我更新了小提琴(http://jsfiddle.net/G74Aq/8/)。難道是爲了確定x位置而在'd.key'值和數組索引'i'之間存在混淆? – lve