2011-02-15 85 views
0

我有一个JavaScript的arraylike这样的:Javascript数组排序问题

a[0][0] = "apple"; 
a[0][1] = 6.5; 
a[1][0] = "orange"; 
a[1][1] = 4.3; 
a[2][0] = "pear"; 
a[2][1] = 3.1; 

我想按升序浮点数字段进行排序,并指定升序内容为好。

a[0][0] = "pear"; 
a[1][1] = 3.1; 
a[1][0] = "orange"; 
a[1][1] = 4.3; 
a[2][0] = "apple"; 
a[2][1] = 6.5; 

我试图排序的内容,但是代码似乎不允许浮点数。

此外,我不知道如何重新分配内容的升序。 任何人都可以帮助我吗?

a.sort(function(a,b){return a[1] - b[1];}); 
+0

试a.sort(功能(A,B){返回一个[1] > b [1];}); ?负值返回true,我认为 – BiAiB 2011-02-15 15:50:09

+3

你看到了什么错误?该代码起作用,至少对于主要排序:http://jsbin.com/ulite3 – 2011-02-15 15:50:34

回答

0

你只需要改变A,B顺序排序功能

a.sort(function(a,b){return b[1] -a[1];}); 

试试这个在您的萤火虫,蜻蜓或WebKit的控制台

var a = [["apple",6.5],["orange",4.3],["pear",3.1]]; 
a.sort(function(a,b){return b[1] -a[1];}); 

console.log(a); 
2

你创建数组正确? 你的排序功能是正确的......

var a=[['apple',6.5],['orange',4.3],['pear',3.1]]; 
a.sort(function(a,b){return a[1]-b[1]}); 

/* returned value: (Array) 
pear,3.1,orange,4.3,apple,6.5 
*/ 
3

前提是你没有报价是正确的代码的部分,应该工作

var index; 
var a = []; // inferred 

a[0] = []; // inferred 
a[1] = []; // inferred 
a[2] = []; // inferred 

a[0][0] = "apple"; 
a[0][1] = 6.5; 
a[1][0] = "orange"; 
a[1][2] = 4.3; 
a[2][0] = "pear"; 
a[2][3] = 3.1; 

a.sort(function(a,b){ 
    return a[1] - b[1]; 
}); 

for (index = 0; index < a.length; ++index) { 
    display(a[index].join()); 
} 

Live copy

输出:

pear,3.1 
orange,4.3 
apple,6.5

题外话:一种更有效的,也许更清晰,方式来初始化数组:

var a = [ 
    ["apple", 6.5], 
    ["orange", 4.3], 
    ["pear", 3.1] 
]; 

Live copy