我有一个像这样的对象数组:
[ {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;
});
但它无法正常工作。
由于
答案 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);
答案 1 :(得分:0)
您可以使用Alasql JavaScript库在一行中执行此操作。这是一个例子:
var res = alasql('SELECT * FROM ? ORDER BY x,y',[data]);
试试这个例子at jsFiddle。