将浮点数排序为自然数

sort float numbers as a natural numbers

本文关键字:自然数 排序 浮点数      更新时间:2023-09-26

我有一个逗号分隔的浮点数。

 var example = "1.1, 1.10, 1.2, 3.1, 3.14, 3.5";

我想对这些浮点数进行排序,比如

"1.1, 1.2, 1.10, 3.1, 3.5, 3.14"

实际上,在我的情况下,小数后的数字会被认为是一个自然数,所以1.2会被认为"2",1.10会被认为为"10",这就是为什么1.2会比1.10排在第一位。

建议或榜样对我来说都很好,谢谢。

实际上,我想首先根据小数前的数字对数组进行排序:),然后运行上面的逻辑。

您可以使用带有自定义比较功能的.sort,就像一样

var example = "1.1, 1.10, 1.2, 3.1, 3.14, 3.5";
var res = example.split(',').sort(function (a, b) {
  var result;
  
  a = a.split('.'), 
  b = b.split('.');
  while (a.length) {
    result = a.shift() - (b.shift() || 0);
    
    if (result) {
      return result;
    }
  }
  return -b.length;
}).join(',');
console.log(res);

您需要一个自定义排序函数,该函数首先比较小数点前的数值,然后比较小数点后的数值,以防它们相等。

example.split(", ").sort(function (a, b) {
    var aParts = a.split(".", 2);
    var bParts = b.split(".", 2);
    if (aParts[0] < bParts[0]) return -1;
    if (aParts[0] > bParts[0]) return 1;
    return aParts[1] - bParts[1]; // sort only distinguishes < 0, = 0 or > 0
}).join(", ");