【发布时间】:2012-08-17 11:19:58
【问题描述】:
我正在尝试对一个 javascript 数组进行排序,该数组包含任何类型的数据,比如数字、字符串、日期、时间等。我的逻辑适用于除数字以外的所有数据类型。它将数字视为字符串。
例如,我有一个如下数组:
array = ["1","2","12","22","33","3"]
我希望排序后的数组是1,2,3,12,22,33…,但它给出的是:1,12,2,22,3,33…
任何人都可以改进我的代码,它必须适用于任何类型的数据类型。
这是我的排序代码:
function sortTable(a,b){
if(sortMode=="A"){
if(a[1]>b[1]) return 1;
if(a[1]<b[1]) return -1;
}
else if( sortMode=="D"){
if(a[1]>b[1]) return -1;
if(a[1]<b[1]) return 1;
}
return 0;
}
array.sort(sortTable);
注意:我无法预测我的数组中将包含哪种数据类型的数据……所以排序函数必须是通用的。意思是,我不能为不同的数据类型调用不同的排序技术函数……请确保排序函数适用于所有数据类型。
【问题讨论】:
-
您不能像这样创建一个适用于 all 数据类型的排序函数。您必须让它接受一个标志,该标志定义了应该如何对值进行排序(例如,按数字、按字典顺序),并且可能是一个转换器函数。这不仅仅是精炼代码...如果您只是想让字符串按数字排序,请将字符串转换为数字,此处对此进行了说明:stackoverflow.com/questions/1133770/…
-
我可以将我的字符串解析为整数..但是如果我的数组是这样的{"India","China","Russia"}。我们可以将这些字符串转换为整数吗?谢谢..
-
如果数组包含多种数据类型,你知道这些类型应该如何排序吗?也就是说,日期应该在字符串之前,数字在日期之前,等等?
-
所以你的数组可以是
["1", "12", "2", "India", "China"]?您希望它在排序后会是什么样子? -
@RamaRaoM 您可以编写一个排序函数来检查被排序的值的类型,但这似乎不必要地笨重,即使您这样做,您怎么知道在某些情况下,您的字符串需要强制转换成数字吗?
标签: javascript sorting