首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强制某些字符串在javascript中最后排序?

如何强制某些字符串在javascript中最后排序?
EN

Stack Overflow用户
提问于 2014-06-18 15:58:43
回答 2查看 1.3K关注 0票数 1

我试图按字母顺序排列一个字符串数组,但某些字符串(例如,"NA""Wild")应该总是放在最后。排序优先级应该是sorted_values_alphabetically < "NA" < "Wild"

如果我们有以下数组:

代码语言:javascript
复制
["Wild", "sit", "ipsum", "dolor", "NA", "amet", "lorem"];

我希望将其分类如下:

代码语言:javascript
复制
["amet", "dolor", "ipsum", "lorem", "sit", "NA", "Wild"];

我在想

代码语言:javascript
复制
arr.sort(function(a,b) {
  var aVal = a, bVal = b;

  // Hack to make values < "NA" < "Wild"
  if (aVal == "NA") aVal = "zzz" + aVal;
  if (bVal == "NA") bVal = "zzz" + bVal;
  if (aVal == "Wild") aVal = "zzzz" + aVal;
  if (bVal == "Wild") bVal = "zzzz" + bVal;

  return aVal.toLowerCase().localeCompare(bVal.toLowerCase());
});

但这可能并不适用于所有Unicode字符。

我对演算法也很感兴趣!

性能

只是FYI,T.J.Crowder的算法通过jsPerf稍微好一点。我更喜欢Halcyon的更简洁的方法!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-18 16:05:13

可以将异常添加到排序函数中。我有一个聪明的数学:

代码语言:javascript
复制
arr.sort(function(a,b) {
     var exceptions = [ "NA", "Wild" ], indexA, indexB;
     indexA = exceptions.indexOf(a);
     indexB = exceptions.indexOf(b);
     if (indexA === -1 && indexB === -1) {
         return a.toLowerCase().localeCompare(b.toLowerCase()); // regular case
     }
     return indexA - indexB; // index will be -1 (doesn't occur), 0 or 1
});
票数 1
EN

Stack Overflow用户

发布于 2014-06-18 16:05:23

因此,基本上,所有字符串都小于"Wild",除"Wild"以外的所有字符串都小于"NA"。传递给sort的函数应该返回一个负数(如果是a < b )、0 (如果是a == b )或一个正数(如果是a > b )。因此,您可以通过返回适当的值来处理特殊情况:

代码语言:javascript
复制
arr.sort(function(a,b) {

  // Everything is less than "Wild"
  if (a === "Wild") {
    return 1;  // a is greater than b
  }
  if (b === "Wild") {
    return -1; // b is greater than a
  }

  // Everything else is less than "NA"
  if (a === "NA") {
    return 1;  // a is greater than b
  }
  if (b === "NA") {
    return -1; // b is greater than a
  }

  // Normal result
  return a.toLowerCase().localeCompare(a.toLowerCase());
});

实例化 (来源)

(很明显,详细的评论使这看起来比实际长.)

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

https://stackoverflow.com/questions/24290131

复制
相关文章

相似问题

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