2

我尝试了下面的示例,但现在使用正确的信息。

var fruits = [110.111, 1245.22222, 2.458, 0.001];
fruits.sort();
document.write(fruits);

结果 :

0.001,110.111,1245.22222,2.458

但我想要这样的东西

0.001,2.458,110..111,1245.22222

这段代码有什么问题?

4

4 回答 4

7

array.sort( [compareFunction] )采用一个可选函数,用作自定义比较器

fruits.sort(function(a, b){
  return a - b;
});

如果要降序排序

fruits.sort(function(a, b){
  return b - a;
});

通过:MDN Array.prototype.sort 文档

  • 如果compareFunction(a, b)小于 0,则将 a 排序到比 b 低的索引,即 a 在前。
  • 如果compareFunction(a, b)返回 0,则 a 和 b 彼此保持不变,但对所有不同元素进行排序。注意:ECMAscript 标准不保证这种行为,因此并非所有浏览器(例如,至少可以追溯到 2003 年的 Mozilla 版本)都尊重这一点。
  • 如果compareFunction(a, b)大于 0,则将 b 排序到比 a 低的索引。
  • compareFunction(a, b)当给定一对特定的元素 a 和 b 作为其两个参数时,必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义

最近,我一直在做一些函数式编程。对于希望以不同方式解决同一问题的人,我将把本节作为另一种选择。

首先,我们有一些通用的效用函数。当我们想要定义我们的高阶ascdesc排序函数时,这些将是必要的。

const sub = x => y => y - x;
const flip = f => x => y => f (y) (x);
const uncurry = f => (x,y) => f (x) (y);
const sort = f => xs => xs.sort(uncurry (f));

现在您可以轻松ascdesc定义sub

const asc = sort (flip (sub));
const desc = sort (sub);

一探究竟

asc ([4,3,1,2]);  //=> [1,2,3,4]
desc ([4,3,1,2]); //=> [4,3,2,1]

您仍然可以使用sort (comparator) (someData)

// sort someData by `name` property in ascending order
sort ((a,b) => a.name - b.name) (someData); //=> ...
于 2013-08-19T06:04:30.957 回答
2

您可以使用这样的自定义排序功能:

fruits.sort(function (a,b) {return a - b;});

Array.sort()方法将数字视为字符串,并按 ASCII 顺序对成员进行排序。

于 2013-08-19T06:03:54.687 回答
2

使用自定义函数进行排序。

要对其进行排序,您需要创建一个带有两个参数的比较器函数,然后使用该比较器函数调用排序函数,如下所示:

fruits.sort(function(a,b) { return parseFloat(a) - parseFloat(b) } );

如果要对升序更改 parseInt(a) - parseInt(b) 和 parseInt(b) - parseInt(a) 进行排序。注意从 a 到 b 的变化。

于 2013-08-19T06:26:48.880 回答
1

您可以定义排序功能:

fruits.sort(function(a,b) {return a>b})
于 2013-08-19T06:03:56.897 回答