【问题标题】:How to sort an array in Javascript like C#?如何在像 C# 这样的 Javascript 中对数组进行排序?
【发布时间】:2014-11-07 10:30:00
【问题描述】:

我想在 JavaScript 中将数组排序为 asc。使用排序方法后,结果如下。

[ '123, '12', '1A1', '1A', '1a', 'A1', 'A2', 'AB', 'A', 'Ab', 'a1', 'a2', 'aB', 'ab' ]

当我使用 C# 排序 Array.Sort() 时,结果如下所示。

{ "12", "123", "1a", "1A", "1A1", "A", "a1", "A1", "a2", "A2", "ab", "aB", "Ab", "AB" }

其实C#的排序方式是我想要的,那么如何在JavaScript中实现呢?以前有人完成过这个任务吗?比较器功能真的很感激。

【问题讨论】:

  • 为什么这是反对票,答案是赞成票。不明白,写一个新函数不是问题的答案。
  • @T.J.Crowder 他指定的顺序实际上是 C# Array.Sort 给出的。
  • 你注意到A是一个单一的字符了吗?我猜想所以 C# 在它的 sort 方法中有特殊的操作。假设 C# 排序是一个预期的结果,现在我想使用 JavaScript 来匹配它。
  • 这里是 ideone.com...ideone.com/ZLKC8M 看起来 C# 对字符串进行了多次排序,逐个遍历字符,例如OrderBy([0]).ThenBy([1]).ThenBy([2]) 等等
  • @Damon 我删除了关于基于反编译的 C# 代码编写自己的 JavaScript 函数的问题。 C# 使用 InternalCompareString Windows API 函数,条件太多...编写自己的 C# 委托函数进行排序比研究 InternalCompareString Windows API 的实现更容易。

标签: c# javascript arrays sorting


【解决方案1】:

Array.prototype.sort 默认使用字符串比较。您似乎想比较不区分大小写 - 您可以传入一个使用 toLowerCase 的比较器函数(但要注意与 .toLocaleLowerCase 的区别!):

a.sort(function(a, b) {
  a = a.toLowerCase(); b = b.toLowerCase();
  return a > b ? 1 : a < b ? -1 : 0;
});

【讨论】:

    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    相关资源
    最近更新 更多