对小数和整数数组进行排序
Sorting an array of decimal & whole numbers
我似乎想不通。
var arr = [2.62, 111.05, 1.05]
arr.sort();
这个 returns [1.05, 111.05, 2.62],但我期待 [1.05, 2.62, 111.05].
如何实现?我读过一些关于编写自定义排序来拆分 "decimal" 但没有成功的文章。
默认情况下按字母顺序排序。您需要将函数传递给 sort
方法
arr.sort(function(a, b){return a-b;});
这是 Array.sort()
未提供比较器功能时的正常行为。试试这个:
var arr = [2.62, 111.05, 1.05];
arr.sort(function(a,b) { return a-b; });
来自MDN:
If compareFunction is not supplied, elements are sorted by converting them to strings and comparing strings in Unicode code point order. For example, "Cherry" comes before "banana". In a numeric sort, 9 comes before 80, but because numbers are converted to strings, "80" comes before "9" in Unicode order.
sort
method默认将项目作为字符串进行比较。您可以指定一个比较器函数以任何您喜欢的方式进行比较。这会将项目作为数字进行比较:
arr.sort(function(a, b){ return a - b; });
注意:Javascript中的所有数字都是双精度浮点数,即使它们恰好包含整数值,因此整数值和小数值没有区别对待。
我似乎想不通。
var arr = [2.62, 111.05, 1.05]
arr.sort();
这个 returns [1.05, 111.05, 2.62],但我期待 [1.05, 2.62, 111.05].
如何实现?我读过一些关于编写自定义排序来拆分 "decimal" 但没有成功的文章。
默认情况下按字母顺序排序。您需要将函数传递给 sort
方法
arr.sort(function(a, b){return a-b;});
这是 Array.sort()
未提供比较器功能时的正常行为。试试这个:
var arr = [2.62, 111.05, 1.05];
arr.sort(function(a,b) { return a-b; });
来自MDN:
If compareFunction is not supplied, elements are sorted by converting them to strings and comparing strings in Unicode code point order. For example, "Cherry" comes before "banana". In a numeric sort, 9 comes before 80, but because numbers are converted to strings, "80" comes before "9" in Unicode order.
sort
method默认将项目作为字符串进行比较。您可以指定一个比较器函数以任何您喜欢的方式进行比较。这会将项目作为数字进行比较:
arr.sort(function(a, b){ return a - b; });
注意:Javascript中的所有数字都是双精度浮点数,即使它们恰好包含整数值,因此整数值和小数值没有区别对待。