我有一个string类型的整数数组。
var a = ['200','1','40','0','3'];
>>> var a = ['200','1','40','0','3'];
console.log(a.sort());
["0", "1", "200", "3", "40"]
我还有一个混合型数组。 e.g。
var c = ['200','1','40','apple','orange'];
>>> var c = ['200','1','40','apple','orange']; console.log(c.sort());
["1", "200", "40", "apple", "orange"]
=============================================== ===
字符串类型的整数未分类。
答案 0 :(得分:17)
正如其他人所说,你可以编写自己的比较函数:
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"]
答案 1 :(得分:6)
这应该是你要找的东西
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"]
答案 2 :(得分:1)
您需要编写自己的排序功能。
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;
});
答案 3 :(得分: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 a<b ? -1 : a>b ? 1 : 0;
}) ;
alert(temp);
答案 4 :(得分:-1)
据我所知,大多数javascript实现都提供了一个函数,您可以传递它来提供自己的自定义排序。