Array.sort和Linq OrderBy给出不同的结果

Ame*_*sed 2 javascript c# arrays sorting

我试图在C#和javascript中对数组进行排序.但我遇到的问题是排序结果都不匹配.它们的排序方式不同,例如输入数组是否有下划线.

在C#下面是一个示例代码,是一个dotnetfiddle链接.

using System;
using System.Linq;

public class Program
{
    public static void Main()
    {
        var array= new string[]{"Meter_2","Meter0Add","Meter0Replace","Meter_1","ZZZ"};

        var temp= array.OrderBy(x => x).ToArray();

        foreach(string x in temp)
        {
            Console.WriteLine(x);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

结果:Meter_1,Meter_2,Meter0Add,Meter0Replace,ZZZ

在javascript下面是一个代码示例是一个js小提琴链接.

var array  = ["Meter_2","Meter0Add","Meter0Replace","Meter_1","ZZZ"];
array.sort();
document.writeln(array.join(", "));
Run Code Online (Sandbox Code Playgroud)

结果Meter0Add,Meter0Replace,Meter_1,Meter_2,ZZZ

问题是如何使javascript与C#相同?

Ori*_*ori 7

JS Array#sort有一个默认的排序顺序,并且不稳定,除非提供了compare函数.据MDN称:

sort()方法对数组中的元素进行排序并返回数组.排序不一定稳定.默认排序顺序是根据字符串Unicode代码点.

如果您将String#localeCompare用作比较功能,您将获得相同的结果:

var array = ["Meter_2", "Meter0Add", "Meter0Replace", "Meter_1", "ZZZ"];
array.sort(function(a, b) {
  return a.localeCompare(b);
});
console.log(array.join(", "));
Run Code Online (Sandbox Code Playgroud)


注意:您可以在本文中找到更多信息 - 排序 - 我们做错了