javascript - 在 JavaScript 中使用特殊字符对字母数字数据进行排序

标签 javascript arrays sorting

DATA = ["Ge_total_EN394" , "p1@5end_chr2:191878874..191878938,-" , "p23@5end_chr2:191839657..191839662,-" , "p2@5end_chr2:191878812..191878823,-"]

我想按升序对数据进行排序。我目前使用的排序函数如下

function sort(s1, s2) {
  var s1lower = s1.toLowerCase();
  var s2lower = s2.toLowerCase();
  return s1lower > s2lower? 1 : (s1lower < s2lower? -1 : 0);
}

但是这给了我以下输出

"Ge_total_EN394" , "p1@5end_chr2:191878874..191878938,-" , "p23@5end_chr2:191839657..191839662,-" , "p2@5end_chr2:191878812..191878823,-"

p23 位于 p2 之前,这是不正确的。我不知道如何正确排序数据,以便 p2 出现在

最佳答案

is there is a piece of code that can only sort alphanumeric characters and disregard any special characters

是的,通过正则表达式替换来删除所有非字母数字字符很容易:

function sort(s1, s2) {
  var s1lower = s1.toLowerCase().replace(/[^a-z0-9]/g, "");
  var s2lower = s2.toLowerCase().replace(/[^a-z0-9]/g, "");
  return s1lower > s2lower? 1 : (s1lower < s2lower? -1 : 0);
}

但是,我认为简单地忽略“特殊”字符并不是您真正需要的,因为如果您只保留字母数字字符,您将拥有:

"p235endchr2191839657191839662"   // originally "p23@..."
"p25endchr2191878812191878823"    // originally "p2@..."

...因此 p23 项仍会出现在 p2 项之前。

您似乎真正想要的是,如果有 @ 符号,则按 @ 之前的部分排序,所以也许是这样的:

function sort(s1, s2) {
  var s1lower = s1.toLowerCase().split("@");
  var s2lower = s2.toLowerCase().split("@");
  if (s1lower[0] > s2lower[0])
    return 1;
  else if (s1lower[0] < s2lower[0])
    return -1;
  else
    return s1lower[1] > s2lower[1] ? 1 : s1lower[1] < s2lower[1] ? -1 : 0;
}

DATA = ["Ge_total_EN394" , "p1@5end_chr2:191878874..191878938,-" , "p23@5end_chr2:191839657..191839662,-" , "p2@5end_chr2:191878812..191878823,-", "p23@1end_chr2:191878812..191878823,-"];

DATA.sort(sort);
console.log(DATA);

(我已将其更改为使用 if/else if/else,以使其比使用多个链式三元运算符更具可读性。)

关于javascript - 在 JavaScript 中使用特殊字符对字母数字数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40167112/

相关文章:

javascript - 单击从控制台工作但不在代码中工作

java - 为什么这个方法不返回true?

javascript - d3 从 csv 文件中提取单个值

php - 跟踪未登录的用户

javascript - Route.get() 需要回调函数,但得到了一个 [object Promise]

ruby - 基于不同权重随机打乱数组的算法

java - 如何从 ArrayList 交换两个子列表?

sorting - 如何使用vuetify的自定义排序?

javascript - jQuery:在序列化之前保留表单值?

javascript - 我无法从这个数组中删除这个特定的项目