我试图用C#和javascript对数组进行排序。但我遇到的问题是排序结果都不匹配。它们的排序方式不同,例如输入数组是否有下划线。
下面的C#中的是一个示例代码,Here是一个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);
}
}
}
结果: Meter_1, Meter_2, Meter0Add, Meter0Replace, ZZZ
在下面的javascript中是一个代码示例Here是一个js小提琴链接。
var array = ["Meter_2","Meter0Add","Meter0Replace","Meter_1","ZZZ"];
array.sort();
document.writeln(array.join(", "));
结果 Meter0Add, Meter0Replace, Meter_1, Meter_2, ZZZ
问题是如何使javascript与C#相同?
答案 0 :(得分:6)
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(", "));
注意:您可以在本文中找到更多信息 - Sorting - We're Doing It Wrong