javascript正确排序十进制数字

标签 javascript sorting

好的,我有一段代码按字母顺序对给出的名称进行排序。

但是代码并没有按照我想要的方式处理小数。

它以以下方式对名称进行排序(Obv 我宁愿它以数字递增):

它会订购它:

  • 苹果 - 1.0051
  • 苹果 - 1.1071
  • 苹果 - 11.1592
  • 苹果 - 12.0692
  • 苹果 - 12.1717
  • APPLE - 2.0186 << 这显然应该在“APPLE - 1.1071”之后
  • 苹果 - 21.1407
  • 苹果 - 22.089
  • 苹果 - 23.069
  • 香蕉 - 1.0051
  • 香蕉 - 1.1071
  • 香蕉 - 11.1592
  • 香蕉 - 12.0692
  • 香蕉 - 12.1717
  • BANANA - 2.0186 << 这显然应该在“BANANA - 1.1071”之后
  • 香蕉 - 21.1407
  • 香蕉 - 22.089
  • 香蕉 - 23.069

这是我正在使用的代码。我不完全理解代码,因为它是我一直在使用的一个片段。

function(a, b){
         var nameA=a.myname.toLowerCase(), nameB=b.myname.toLowerCase()
         if (nameA < nameB) //sort string ascending
          return -1 
         if (nameA > nameB)
          return 1
         return 0 //default return value (no sorting)
    }

问候, 强尼

最佳答案

Demo这是来源+小解释:

function fruit_sort(a, b) {
    var parts = {
        a: a.split('-'),
        b: b.split('-')
    };
    if (parts.a[0] == parts.b[0]) // strings are the same
        return parseFloat(parts.a[1]) - parseFloat(parts.b[1]); // sort by number
    return parts.a[0] > parts.b[0] ? 1 : -1; // sort by string
}
var arr = ["APPLE - 1.0051",
    "APPLE - 1.1071",
    "APPLE - 11.1592",
    "APPLE - 12.0692",
    "BANANA - 1.0051",
    "BANANA - 1.1071",
    "BANANA - 11.1592",
    "BANANA - 12.0692",
    "BANANA - 12.1717",
    "APPLE - 12.1717",
    "APPLE - 2.0186",
    "APPLE - 21.1407",
    "BANANA - 23.069",
    "APPLE - 22.089",
    "APPLE - 23.069",
    "BANANA - 2.0186",
    "BANANA - 21.1407",
    "BANANA - 22.089"];
arr.sort(fruit_sort);
console.log(arr);
// outputs
[
    "APPLE - 1.0051",
    "APPLE - 1.1071",
    "APPLE - 2.0186",
    "APPLE - 11.1592",
    "APPLE - 12.0692",
    "APPLE - 12.1717",
    "APPLE - 21.1407",
    "APPLE - 22.089",
    "APPLE - 23.069",
    "BANANA - 1.0051",
    "BANANA - 1.1071",
    "BANANA - 2.0186",
    "BANANA - 11.1592",
    "BANANA - 12.0692",
    "BANANA - 12.1717",
    "BANANA - 21.1407",
    "BANANA - 22.089",
    "BANANA - 23.069"
]

首先,该函数将术语拆分为它们的文本和数字部分——如果文本是偶数,它只按数值的 parseFloat 值排序——否则它首先按字符串值排序。

关于javascript正确排序十进制数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540356/

相关文章:

javascript - 第 nth-of-type 不按需要工作

c - 为什么在将反向排序数组作为输入时出现段错误?

python - 如何根据层次结构对数据进行排序

c# - C# 中的桶排序 - 怎么做?

swift - 按键值对字典排序

c++ - 排序具有多个成员的结构 C++

javascript - jQuery 定义函数未选择

javascript - 如何使用 JavaScript 将呈现的网页另存为图像?

javascript - 我怎样才能添加温度。 meteor 发布的字段

php - 如何在 Javascript 和 PHP 中验证非英语(UTF-8)编码的电子邮件地址?