排序错误的数组。Javascript
我有以下javascript数组:排序错误的数组。Javascript,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有以下javascript数组: a=[0, "b", 2, 3, 4, 5, 1, 9, 8, "A", "a", 11010] 现在我想对它进行排序,我这样做 a.sort() 但我得到了以下信息: [0, 1, 11010, 2, 3, 4, 5, 8, 9, "A", "a", "b"] a.sort(function(a,b){return a-b;}); [0, "b", 11010, 2, 3, 4, 1, 8, 9, "A", "a", 5] 我认为这是错误的,因为1
a=[0, "b", 2, 3, 4, 5, 1, 9, 8, "A", "a", 11010]
现在我想对它进行排序,我这样做
a.sort()
但我得到了以下信息:
[0, 1, 11010, 2, 3, 4, 5, 8, 9, "A", "a", "b"]
a.sort(function(a,b){return a-b;});
[0, "b", 11010, 2, 3, 4, 1, 8, 9, "A", "a", 5]
我认为这是错误的,因为11010大于2,应该在2之后。
即使我做了以下事情:
[0, 1, 11010, 2, 3, 4, 5, 8, 9, "A", "a", "b"]
a.sort(function(a,b){return a-b;});
[0, "b", 11010, 2, 3, 4, 1, 8, 9, "A", "a", 5]
我得到以下信息:
[0, 1, 11010, 2, 3, 4, 5, 8, 9, "A", "a", "b"]
a.sort(function(a,b){return a-b;});
[0, "b", 11010, 2, 3, 4, 1, 8, 9, "A", "a", 5]
有人能解释一下为什么会发生这种情况吗?谢谢问题是,在排序时,JavaScript默认将所有数组元素视为字符串 JavaScript不像Haskell或Java那样是类型安全的。这意味着您可以执行各种疯狂的操作,比如添加数字和字符串,或者在不抛出错误的情况下将字符串与数字进行比较 如表中所示,1的值为49,小于小写a的值97 “1”放在“10110”之前,原因与“a”排序在“apple”之前相同
涵盖了许多由不同类型操作导致的高度意外的JavaScript默认模式 您的数组既有数字也有字符串。您需要做的是提供一个比较函数
a = [0, "b", 2, 3, 4, 5, 1, 9, 8, "A", "a", 11010]
a.sort(function(c1, c2) {
if(typeof c1 === "number" && typeof c2 == "number") {
return c1 - c2;
} else {
return (c1 + "").localeCompare(c2);
}
);
看看array.sort在这种情况下是如何工作的 如果您不提供自己的排序功能,那么 “元素通过将其转换为字符串并进行比较来排序 Unicode代码点顺序的字符串。“ 作为一个字符串,11010位于2之前。您没有提供排序函数,因此排序方法使用默认行为
这就是为什么您会看到您注意到的行为。排序操作中的目标顺序可能重复,以及为什么字符串和数字都在数组中?A解释了为什么“因为您包含字符串元素”,即使没有字符串值,所有元素都会被视为字符串。是的,这是他的第一个答案。