我有一个数组:
let arr = ['100.12', '100.8', '100.11', '100.9'];
排序后得到输出:
'100.11',
'100.12',
'100.8',
'100.9',
但是我希望它能像页面索引一样进行排序:
'100.8',
'100.9',
'100.11',
'100.12',
编辑:
我几乎没有好的解决方案,但是他们在一处缺乏:
arr1 = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9']
结果将是:
["77.8", "77.9", "77.11", "77.12", "77", "88", "100.8", "100.11", "100.12", "100", "100.9", "119", "120"]
这里应该是:
[ "77", "77.8", "77.9", "77.11", "77.12", "88", "100", "100.8", "100.11", "100.12", "100.9", "119", "120"]
答案 0 :(得分:0)
您可以将string#localeCompare
与numeric
属性一起使用,以根据数值对数组进行排序。
let arr = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9'];
arr.sort((a, b) => a.localeCompare(b, undefined, {numeric: true}))
console.log(arr)
答案 1 :(得分:-1)
您正在对字符串进行排序,一种解决方案是将其转换为float数组:
const arr = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9'];
var floatArray = arr.map(function(elem) {
return parseFloat(elem);
});
floatArray = floatArray.sort((a, b) => a - b);
console.log("Float array sorted:")
console.log(floatArray);
//if you need an array of strings
var stringArray = floatArray.map(function(elem) {
return elem.toString();
});
console.log("String array sorted:")
console.log(stringArray);
简化版:
const arr = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9'];
var sortedArray= arr.map(function(elem) {return parseFloat(elem); })
.sort((a, b) => a - b)
.map(function(elem) {return elem.toString(); });
console.log(sortedArray);
答案 2 :(得分:-1)
不是简单的单线。您想先按整数部分排序,如果相等,再按小数部分排序。
const arr = ['100.12', '77.8', '88', '77.11', '77.12', '77.9', '77', '119', '120', '100.8', '100.11', '100', '100.9'];
const sorted = arr.sort((a, b) => {
if (parseInt(a) !== parseInt(b)) {
return parseInt(a) - parseInt(b);
}
return (parseInt(a.split('.')[1], 10) || 0) - (parseInt(b.split('.')[1], 10) || 0);
});
console.log(sorted);