2013-08-19 70 views
1

我尝试了下面的例子,但现在正在处理正确的信息。如何在JavaScript中对浮点数组进行排序?

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 

不对的代码是什么?在ASCII为了

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

Array.sort()方法将把数字视为字符串,订单成员:

+0

谁能告诉我,为什么'的.sort()'渲染错误输出? – void

回答

6

array.sort([compareFunction])有一个可选的功能,它可以作为一个自定义的比较

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

如果你想降序排序

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

经由:MDN Array.prototype.sort docs

  • 如果compareFunction(a, b)小于0,排序一个比B,即一个较低折射率的第一。
  • 如果compareFunction(a, b)返回0,则相对于彼此保持a和b不变,但相对于所有不同的元素进行排序。注意:ECMAscript标准并不保证这种行为,因此并非所有浏览器(例如,至少可以追溯到2003年的Mozilla版本)都尊重这一点。
  • 如果compareFunction(a, b)大于0,排序b键比较低折射率。
  • 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)); 

现在你可以在sub

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

方面很容易地定义ascdesc检查出来

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); //=> ... 
+0

太感谢你了 –

+0

谁能告诉我,为什么'的.sort()'渲染错误输出? – void

2

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

+0

任何人都可以告诉我为什么'.sort()'呈现错误的输出? – void

1

您可以定义排序功能:

fruits.sort(function(a,b) {return a>b}) 
+0

任何人都可以告诉我为什么'.sort()'呈现错误的输出? – void

1

使用自定义功能进行排序。

对它进行排序,你需要创建一个比较函数接受两个 参数,然后调用排序功能与比较 功能如下:

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

如果你想排序升序变化parseInt函数(一) - parseInt函数(b)和parseInt函数(b) - parseInt函数(a)中。请注意0​​从a更改为b。

+0

任何人都可以告诉我为什么'.sort()'呈现错误的输出? – void