JavaScript对具有混合类型值的数组进行排序
JavaScript sorting of an array with mixed type values
我有以下数组,需要按降序进行数字排序:
var arr = ['5', '5.1', '5.1.4', '6.0.0', '500'];
所需的顺序如下:
500
6.0.0
5.1.4
5.1
5
然而,我尝试过的所有方法似乎都没有得到所需的结果。下面是一个不能处理这类数组的排序函数的例子:
arr = arr.sort(function(a,b){return b - a});
谁能给我一个提示,如何才能实现这一点?
谢谢。
以下解决方案的逻辑完全取自这个答案(所有功劳都在那里!),但结果是颠倒的,使顺序降序(+修复小错误):
['5', '5.1', '5.1.4', '6.0.0', '500'].sort(function(a, b) {
if (a === b) {
return 0;
}
var a_components = a.split('.'),
b_components = b.split('.'),
len = Math.min(a_components.length, b_components.length);
for (var i = 0; i < len; i++) {
if (parseInt(a_components[i], 10) > parseInt(b_components[i], 10)) {
return -1;
}
if (parseInt(a_components[i], 10) < parseInt(b_components[i], 10)) {
return 1;
}
}
if (a_components.length > b_components.length) {
return -1;
}
if (a_components.length < b_components.length) {
return 1;
}
return 0;
});
// >> ["500", "6.0.0", "5.1.4", "5.1", "5"]
arr.sort(function(a,b){
//if they are equal, return 0
if(a==b) return 0;
//split version numbers and compare each one until we got one that differs
var verA = a.split('.'), verB = b.split('.');
for(var i=0;i<Math.max(verA.length, verB.length);i++) {
//verA is shorter or equal, so we return 1
if(verA[i]===undefined)
return 1;
//verB is shorter or equal, so we return -1
if(verB[i]===undefined)
return -1;
//first encounter where the 2 are defined and are different
if(verB[i]-verA[i]!=0)
return verB[i]-verA[i];
//in other situations they are equal, so we go to the next iteration
}
});
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序