使用函数“sort”对javascript数组进行排序
Sorting javascript array using function 'sort"
我正在尝试对一个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);
注意:我无法预测我的数组中将包含哪种数据类型的数据...所以排序函数必须是通用的。意思是,我不能为不同的数据类型调用不同的排序技术函数......请确保排序功能适用于所有数据类型。
您没有获得预期输出的原因是,当两个操作数都是字符串类型时,它们之间会进行字母顺序比较。它们不会自动转换为数字。
"2" > "12" // result is true
如果其中一个操作数是数字,尽管比较运算符会将另一个操作数从字符串转换为数字。
"2" > 12 // result is false
需要指出的另一件事是,对于数字数组,您正在尝试访问索引 1 处的数组元素。
if(a[1]>b[1]) return 1;
这应该是:
if( a > b ) return 1;
我会单独处理每个数据类型,而不是编写这样的通用函数。
我写了几个正则表达式条件来检查某些数据结构。(你总是可以做一个大的开关语句,根据"typeof(a)"或"typeof(b)"是什么进行分支。这些检查确定字符串中的值是否应解释为字符串以外的内容。
function sortVals(a,b){
//other code here
var aT=a+"", bT=b+""; //a and b as strings
if(!aT.match(/[^0-9]/) && !bT.match(/[^0-9]/)){//no non-numbers were found
a = parseInt(aT, 10);
b = parseInt(bT, 10);
if(a!=b)
return a<b?1:-1; //returns 1 if a<b; -1 if a>b
}else if(!aT.match(/[^0-9'.]|'..*'./) && !bT.match(/[^0-9'.]|'..*'./)){//only valid floats were found
a = parseFloat(aT);
b = parseFloat(bT);
if(a!=b)
return a<b?1:-1;
}
}
我不知道这是否是你想要的一部分,但如果你想要任何数据类型的排序函数,你需要投入一些工作。祝你好运!
如前所述,您需要识别数据类型。但这里有一个,你可以用于字符串/整数。
var sortMethod = function(x,y){
var a = x|0 ,
b = y|0;
return (a>b) ? 1 : -1;
});
var x = ["1", "34" , "3" , "12"].sort(sortMethod);
var y = [3,52,123,1].sort(sortMethod);
相关文章:
- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript