2014-09-06 63 views
1

我有对象的这样的阵列的对象的阵列:排序由2个属性

[ {x: 1, y: 4}, {x: 1, y: 2}, {x: 1, y: 3}, 
    {x: 3, y: 4}, {x: 3, y: 2}, {x: 3, y: 9}, 
    {x: 2, y: 5}, {x: 1, y: 0}, {x: 1, y: 2} ] 

和我想是这样排序它:

[ {x: 1, y: 2}, {x: 1, y: 3}, {x: 1, y: 4}, 
    {x: 2, y: 0}, {x: 2, y: 2}, {x: 2, y: 5}, 
    {x: 3, y: 2}, {x: 3, y: 4}, {x: 3, y: 9} ] 

所以规则是:数组必须先由x属性排序,然后由y属性排序必须遵守第一个排序规则。

我该怎么做?

我想:

array.sort(function(a, b){ 
var elema = a["x"] ; 
var elemb = b["x"] ; 
if (elema < elemb) 
    return -1; 
if (elema > elemb) 
    return 1; 
return 0; 
}); 

array.sort(function(a, b){ 
var elema = a["y"] ; 
var elemb = b["y"] ; 
if (elema < elemb) 
    return -1; 
if (elema > elemb) 
    return 1; 
return 0; 
}); 

,但它不能正常工作。

谢谢

回答

3

你必须在一个功能。
另外,如果x的值相同,则必须对y值进行比较。

你能做到这样

function SortMyObjects(a, b) 
{ 
    if (a.x < b.x) 
     return -1; 

    if (a.x > b.x) 
     return 1; 

    // a.x == b.x so compare y values 
    if (a.y < b.y) 
     return -1; 

    if (a.y > b.y) 
     return 1; 

    // perfect equality 
    return 0; 
} 

// sort your array 
array.sort(SortMyObjects); 
0

您可以Alasql JavaScript库做它在一行。这是一个例子:

var res = alasql('SELECT * FROM ? ORDER BY x,y',[data]); 

试试这个例子at jsFiddle