如何对javascript数组进行两次数字排序



我有一系列圣经经文,我试图根据经文的自然顺序进行排序。

数组如下所示:

let array = ["1.2","1.3","1.19","2.25","1.0"]

我期望的最终结果是:

1.0, 1.2, 1.3, 1.19, 2.25

欢迎任何指针,我还没有完全想出完美的排序函数,在对小数点另一端的其他所有内容进行排序之前对第一个数字进行排序。

我认为,我目前需要改进的方法是:

x.sort(function(a,b){
let y = a.split(".")[1]
let x = b.split(".")[1]
return a-b && y - x;
})

let array = ["1.2","1.3","1.19","2.25","1.0"];
// split the number into the integer part and decimal part
splits = array.map(x => ({
val: x,
int: Number(x.split(".")[0]),
dec: Number(x.split(".")[1])
}));

splits.sort(function(a, b) {
// compare the integer part first, if equal, compare decimal part
return (a.int === b.int)?(a.dec - b.dec):(a.int - b.int);
});

sorted = splits.map(x => x.val);
console.log(sorted);

就地对数组进行排序的另一个选项:

let array = ["1.2","1.3","1.19","2.25","1.0"];
array.sort(function(a, b) {
a_split = a.split(".").map(Number);
b_split = b.split(".").map(Number);
return (a_split[0] === b_split[0])?(a_split[1] - b_split[1]):(a_split[0] - b_split[0]);
})
console.log(array);

最新更新