首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript localeCompare没有很好的排序[ "aaa-1.0“、"aaa-1.1”、"aaa-1.01“、"aaa-11”、"aaa-2.01"]

JavaScript localeCompare没有很好的排序[ "aaa-1.0“、"aaa-1.1”、"aaa-1.01“、"aaa-11”、"aaa-2.01"]
EN

Stack Overflow用户
提问于 2017-10-20 11:02:52
回答 2查看 124关注 0票数 0

我想按照字符串的“十进制”数字值和字母顺序对字符串进行排序。保持它的自然秩序。

代码语言:javascript
复制
var strArray = ["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.1", "aaa-1.01", "aaa-2.01", "bbb-2.01", "aaa-11", "aaa-2.01"]

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

返回:

代码语言:javascript
复制
["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.1", "aaa-1.01", "aaa-2.01", "aaa-2.01", "aaa-11", "bbb-2.01"]

而我想要:

代码语言:javascript
复制
["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.01", "aaa-1.1", "aaa-2.01", "aaa-2.01", "aaa-11", "bbb-2.01"]

怎么才能做到这一点呢?即使我用",“而不是”。“分类是一样的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-20 11:14:09

你需要把数字和字母分开排序。

演示

代码语言:javascript
复制
var strArray = ["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.1", "aaa-1.01", "aaa-2.01", "bbb-2.01", "aaa-11", "aaa-2.01"]

strArray.sort(function(a, b) {
  var splitA = a.split("-");
  var splitB = b.split("-");
  if (splitA[0] == splitB[0]) {
    return (Number(splitA[1]) - Number(splitB[1]));
  } else {
    return splitA[0].localeCompare(splitB[0], undefined, {
      numeric: true,
      sensitivity: 'base'
    });
  }
});
console.log(strArray);

票数 1
EN

Stack Overflow用户

发布于 2017-10-20 11:16:21

您可以将参数中的标志true设置为true

代码语言:javascript
复制
var array = ["aaa-0", "aaa-0.01", "aaa-1.0", "aaa-1.1", "aaa-1.01", "aaa-2.01", "bbb-2.01", "aaa-11", "aaa-2.01"]

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

console.log(array);
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46847780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档