2013-01-08 86 views
1

我想第一列以降序下面的二維數組進行排序:多維數組被歸類爲字符串,而不是按值

wordsAndCount = [[0,"string"],[4,"string"],[31,"string"],[1,"string"],[3,"string"]]; 
wordsAndCount.sort(); 
wordsAndCount.reverse(); 

出於某種原因,JavaScript是治療的第一列作爲一個字符串,而不是整數,返回下面的輸出:

[4,"string"],[31,"string"],[3,"string"],[1,"string"],[0,"string"] 

當所需的輸出應爲:

[31,"string"],[4,"string"],[3,"string"],[1,"string"],[0,"string"] 

什麼導致JS做到這一點?

回答

7

JavaScript將整個元素視爲一個字符串,而不僅僅是第一個元素。

sort(),沒有指定任何排序功能,將在其所查看的每個元素上調用toString()。對像你這樣的元素調用toString(),在所有的JavaScript引擎,我知道,一定會給喜歡"[0,\"string\"]"

值應該specifiy自己分揀功能解決這個問題:

wordsAndCount.sort(function (a, b) { 
    return b[0] - a[0]; 
}); 

還有將沒有必要使用然後reverse()

欲瞭解更多信息,請參閱MDC documentation on sort()

+1

你可能想'B [0] -a [0]'來消除「反向」呼叫。 – Shmiddty

+0

@Shmiddty:心理數學讓我失望。即將做一個小提琴來檢查我沒有錯;)。 – Matt

+0

工作正常!不過我認爲你應該顛倒'a [0] - b [0]'的順序來得到*降序*,對吧? –

1

你如何期待JavaScript排序你的數組?從the docs

語法

的Array.sort([的compareFunction])

參數

的compareFunction指定定義排序順序的功能。如果省略了 ,則根據每個元素的字符串轉換按照字典順序(按字典順序)對數組進行排序。

您需要告訴 JS如何排序該數組,否則如許就會字典順序排序呢(這是幾乎可以肯定不是你以後在做什麼)