通过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对象排序,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
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,减法运算符(-)将字符串转换为数字。