排序版本号存储为数组中的字符串

Tus*_*kla 3 javascript arrays sorting performance

说我有这样的数组:

var arr = ["1.2.5", "1", "10", "2.0.4", "3.3.3.3"];
Run Code Online (Sandbox Code Playgroud)


什么是对此进行排序并得到如下结果的最佳方法:

var arr = ["1", "1.2.5", "2.0.4", "3.3.3.3", "10"];
Run Code Online (Sandbox Code Playgroud)

首先,我认为将数组中的每个项目转换为浮点数可能会起作用,但是多个小数位则不会给出预期的结果.

我也可以去做for循环和做类似的东西item.split("."),然后逐个检查,但我不认为这是最好的方式.

Nin*_*olz 6

你可以使用String#localeCompareoptions

灵敏度

字符串中的哪些差异应导致非零结果值.可能的值是:

  • "base":只有基本字母不同的字符串才会比较为不相等.例如:a ? b,a = á,a = A.
  • "accent":只有基本字母或重音和其他变音符号不同的字符串才会比较为不相等.例如:a ? b,a ? á,a = A.
  • "case":只有基本字母或大小写不同的字符串才会比较为不相等.例如:a ? b,a = á,a ? A.
  • "variant":基本字母,重音符号和其他变音符号不同的字符串,或不相等的情况比较.其他差异也可以考虑在内.例如:a ? b,a ? á,a ? A.

使用"sort"的默认值为"variant"; 它的语言环境依赖于使用"搜索".

数字

是否应使用数字校对,使"1"<"2"<"10".可能的值是truefalse; 默认是false.可以通过options属性或通过Unicode扩展键设置此选项; 如果两者都提供,则options属性优先.实现不需要支持此属性.

var array = ["1.2.5", "1", "10", "2.0.4", "3.3.3.3"];

array.sort(function (a,b) {
    return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });
});

console.log(array);
Run Code Online (Sandbox Code Playgroud)