2011-08-21 202 views
0

好吧奇怪的結果,並不像預期的那麼多。然而,我不知道該怎麼過來,我正處在其中每一件合乎邏輯的事情都等於對我來說是一個巨大的腦屁。無論如何。爲了方便起見。我的數組只有數字,沒有其他的在那裏..我的數組範圍從1-50,所以我排序它的結果類似於1,10,11,12,13 .... 2,20,21,22,23。 ..等當我需要它去像1,2,3,4,5,6,7,8,9,10,11,12 ...通過JavaScript對JSON對象進行排序奇數結果

我簡單的小罐頭功能是..

function sortJSONresultsByWidgetID(a,b) 
{ 
    if(parseInt(a.wigetID) == parseInt(b.wigetID)) 
    { 
     return 0; 
    } 
    return parseInt(a.wigetID) > parseInt(b.wigetID) ? 1 : -1; 
} 

參考我parseInt函數由於JSON我的JSON處理,當我將它張貼在DB來回,我存儲的實際JSON在DB的方式,把它傳遞給PHP時,它周圍的包裝報價數字從INT轉換爲字符串(或從我注意到可能是基於瀏覽器)。

所以現在我被卡住了,因爲我希望這些東西以特定順序列出,我的大腦今天不會工作。

編輯我的示例排序結果:

dashboardJSON.widgets.sort(sortJSONresultsByWidgetID); 
+0

好吧,你有比較器。你是如何使用它來分類的? – Naor

+0

示例通過編輯原始帖子提供 – chris

+0

我看到你按'wigetID'而不是'widgetId'排序。你的問題可能是由這個錯字造成的嗎? –

回答

1

你需要爲10的基數來解析整數和使用===運算符,而不是==的。我認爲應該這樣做。

function sortJSONresultsByWidgetID(a,b) 
{ 
    var widgetAId = parseInt(a.wigetID, 10); 
    var widgetBId = parseInt(b.wigetID, 10); 

    if(widgetAId === widgetBId) 
    { 
     return 0; 
    } 
    return widgetAId > widgetBId ? 1 : -1; 
} 

更新 - 這裏是與Ellian的優化:

function sortJSONresultsByWidgetID(a,b) 
{ 
    return parseInt(a.wigetID, 10) - parseInt(b.wigetID, 10); 
} 
+0

您可以簡化該排序功能,並返回'parseInt(a.wigedID,10) - parseInt(b.wigedID,10)'。 –

+0

就像一個魅力工作,出人意料地看起來更快 – chris

+0

如果傳入的值是數字,不需要* parseInt *,減法運算符( - )將字符串轉換爲數字。 – RobG

相關問題