Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JavaScript奇数结果对JSON对象排序_Javascript_Arrays_Json_Sorting - Fatal编程技术网

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

通过JavaScript奇数结果对JSON对象排序,javascript,arrays,json,sorting,Javascript,Arrays,Json,Sorting,好吧,奇怪的结果,没有预期的那么多。然而,我不知道如何克服它,我正经历着这样的一天,每一个合乎逻辑的事情对我来说都相当于一个巨大的大脑放屁。无论如何让我们说为了方便。我的数组是数字的,里面没有其他东西。。我的数组的范围是1-50,所以我对它进行排序后的结果类似于1、10、11、12、13。。。。2, 20, 21, 22, 23... 等等,当我需要它像1,2,3,4,5,6,7,8,9,10,11,12 我简单的小函数是 function sortJSONresultsByWidgetID(a

好吧,奇怪的结果,没有预期的那么多。然而,我不知道如何克服它,我正经历着这样的一天,每一个合乎逻辑的事情对我来说都相当于一个巨大的大脑放屁。无论如何让我们说为了方便。我的数组是数字的,里面没有其他东西。。我的数组的范围是1-50,所以我对它进行排序后的结果类似于1、10、11、12、13。。。。2, 20, 21, 22, 23... 等等,当我需要它像1,2,3,4,5,6,7,8,9,10,11,12

我简单的小函数是

function sortJSONresultsByWidgetID(a,b)
{   
    if(parseInt(a.wigetID) == parseInt(b.wigetID))
    {
        return 0;
    }
    return parseInt(a.wigetID) > parseInt(b.wigetID) ? 1 : -1;
}
为了便于参考,我使用JSON解析INT,当我在DB中来回发布JSON时,我使用JSON处理的方式,我将实际的JSON存储在DB中,当将其传递给PHP时,它会在数字周围加上引号,将它们从INT转换为字符串(或者我注意到可能是基于浏览器的)

所以我现在被困在这里,因为我想按特定的顺序列出这些东西,而我的大脑今天无法工作

编辑me排序结果示例:

dashboardJSON.widgets.sort(sortJSONresultsByWidgetID);

您需要解析基数为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);
}

好的,你有比较器。您是如何使用它进行排序的?原始帖子编辑提供的示例我看到您按
wigetID
而不是
widgetId
进行排序。您的问题可能是由这个输入错误引起的吗?我可以看出您可能认为,不幸的是,在原始JSON字符串中,输入错误实际上是合法的。但是最初创建所述JSON的源代码来自JAVA级别的基础设施,因此该部分不在我的控制范围内,我必须使用我所知道的内容。您可以简化排序函数,只需返回
parseInt(a.wigedID,10)-parseInt(b.wigedID,10)
。如果已知传入值是数字,则无需使用parseInt,减法运算符(-)将字符串转换为数字。