使用javascript以特定顺序对具有十进制值的数组进行排序

时间:2018-12-13 15:07:22

标签: javascript arrays typescript sorting

我有一个数组:

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"]

3 个答案:

答案 0 :(得分:0)

您可以将string#localeComparenumeric属性一起使用,以根据数值对数组进行排序。

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);