在jQuery中使用整数字符串类型排序数组

我有一个string类型的整数数组。

var a = ['200','1','40','0','3']; 

产量

 >>> var a = ['200','1','40','0','3']; console.log(a.sort()); ["0", "1", "200", "3", "40"] 

我还将有一个混合型数组。 例如

 var c = ['200','1','40','apple','orange']; 

产量

 >>> var c = ['200','1','40','apple','orange']; console.log(c.sort()); ["1", "200", "40", "apple", "orange"] 

==================================================
字符串类型的整数未排序。

正如其他人所说,你可以编写自己的比较函数:

 var arr = ["200", "1", "40", "cat", "apple"] arr.sort(function(a,b) { if (isNaN(a) || isNaN(b)) { return a > b ? 1 : -1; } return a - b; }); // ["1", "40", "200", "apple", "cat"] 

这应该是你正在寻找的

 var c = ['200','1','40','cba','abc']; c.sort(function(a, b) { if (isNaN(a) || isNaN(b)) { if (a > b) return 1; else return -1; } return a - b; }); // ["1", "40", "200", "abc", "cba"] 

您需要编写自己的排序function。

 a.sort(function(a,b)) { var intValA = parseInt(a, 10); var intValB = parseInt(b, 10); if (!isNaN(parseInt(a, 10))) && !isNaN(parseInt(b, 10)) { // we have two integers if (intValA > intValB) return 1; else if (intValA < intValB) return 0; return 1; } if (!isNaN(parseInt(a, 10)) && isNaN(parseInt(b, 10))) return 1; if (isNaN(parseInt(a, 10)) && !isNaN(parseInt(b, 10))) return -1; // a and b are not integers if (a > b) return 1; if (a < b) return -1; return 0; }); 

谢谢大家,虽然我不太了解jQuery,但是从你们的例子中,我总结了如下的代码,按照我的要求工作

用于萤火虫

 var data = ['10','2', 'apple', 'c' ,'1', '200', 'a'], temp; temp = data.sort(function(a,b) { var an = +a; var bn = +b; if (!isNaN(an) && !isNaN(bn)) { return an - bn; } return ab ? 1 : 0; }) ; alert(temp); 

据我所知,大多数javascript实现都提供了一个可以传递的函数来提供自己的自定义排序。

Mozilla排序方法