我正在尝试根据' Value'对我的列进行排序。字段,它是字符串和数值的组合,按以下顺序
var ascending = ["","","", 0, 0, 0.71, 1]
var descending = [1, 0.71,0,0,"","",""]
我尝试了以下排序算法,但它没有给出理想的结果
function mySort(v1,v2) {
var v1 = obj1[colName];
var v2 = obj2[colName];
if(v1 === ""){
return 1;
}
else if(v2 === ""){
return -1;
}
else if(v1 === v2){
return 0;
}
else if(!sortObj.descending) {
return v1 < v2 ? -1 : 1;
}
else if(sortObj.descending) {
return v1 < v2 ? 1 : -1;
}
}
上面的排序算法始终将""
保持在底部,这在我的情况下是不可取的。我缺少什么?
答案 0 :(得分:1)
var arr = ["", "", 0, "", 1, 0.71, 0];
var asc = arr.slice().sort();
var desc = asc.slice().reverse();
slice()方法将数组的一部分的浅表副本返回到新的数组对象中。
sort()方法对数组中的元素进行排序并返回数组。
reverse()方法可以反转数组。
答案 1 :(得分:1)
您可以先按空字符串排序,然后按数字排序。
var arr = ["", "", 0, "", 1, 0.71, 0, 10, 20, 2];
arr.sort(function (a, b) {
return (a !== "") - (b !== "") || (a || 0) - (b || 0);
});
console.log(arr);
答案 2 :(得分:0)
从你的函数中删除那些IF语句。
if(v1 === ""){
return 1;
}
else if(v2 === ""){
return -1;
}
这样的数字和字符串在JS中已经具有可比性。
编辑:
要比较0,您可以在函数的开头尝试:
if(v1 === 0)
v1 = v1.toString();
if(v2 === 0)
v2 = v2.toString();
// the rest of your logic here
您也可以将其提取到方法中,因此不要重复代码。