javascript - 用 JavaScript 解释这种排序

标签 javascript sorting

var a = ['a100', 'a1', 'a10'];
a.sort();

此记录:["a1", "a10", "a100"]

var a = ['f_a100_', 'f_a1_', 'f_a10_'];
a.sort();

但这会记录:["f_a100_", "f_a10_", "f_a1_"]

你能告诉我这是为什么吗?

最佳答案

Array.sort通过将项目转换为字符串然后进行字典排序来对值进行排序。

现在,通过字典顺序排序,他们的意思是他们将字符串字符一个一个地进行比较,直到找到一个不匹配的字符。字符集中(字母按字母顺序排列)中不匹配字符的位置决定了字符串的等级。

f_a100_
    ^
f_a1_
    ^
f_a10_
    ^

查看第一个不匹配的字符。这里 _ 大于 0(检查它们的 ascii 代码)所以 f_a100_f_a10_ 高于 f_a1_ 。现在在这两者之间我们转到下一个字符

f_a100_
     ^
f_a10_
     ^

在这里,首先应用相同的逻辑 f_a100_。所以最后的顺序是["f_a100_", "f_a10_", "f_a1_"]

这种排序顺序对于简单的字符串来说似乎是合乎逻辑的。但是对于像您这样的某些其他情况,由于字符集的排列方式,它的工作方式很奇怪。要获得所需的行为,您应该编写自己的比较函数来去除数字部分并返回正值、负值或 0 值,如示例中所示。

关于javascript - 用 JavaScript 解释这种排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21264633/

相关文章:

java - 冒泡排序不起作用

javascript - 观察 greasemonkey 脚本中的元素创建?

python读取2个文件,忽略标题(#开头行),并对数据进行排序

java - 如何对具有异常条件的多个字段进行排序

javascript - 媒体查询的 IE 问题

java - 在java中按优先级队列对学生的分数进行排序

javascript - 对 Javascript 数组进行排序

javascript - JavaScript 中数组中的全字匹配

javascript - Prettify.JS 无法正确显示 HTML 脚本标签

javascript - 有没有办法用实际输出的内容/标记替换 `data.variation.variation_description` ?