通过JavaScript对JSON对象进行排序奇数结果

通过JavaScript对JSON对象进行排序奇数结果

问题描述:

好吧奇怪的结果,并不像预期的那么多。然而,我不知道该怎么过来,我正处在其中每一件合乎逻辑的事情都等于对我来说是一个巨大的脑屁。无论如何。为了方便起见。我的数组只有数字,没有其他的在那里..我的数组范围从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'排序。你的问题可能是由这个错字造成的吗? –

你需要为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