[英]Sorting an Array of Objects by 2 Properties
I have an array of objects like this: 我有一个这样的对象数组:
[ {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} ]
and I'd like to sort it like this: 我想这样排序:
[ {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} ]
so the rule is: the array has to be sorted first by the x
property, and then the sorting by the y
property has to observe the first sorting. 所以规则是:数组必须首先按
x
属性排序,然后y
属性的排序必须遵守第一个排序。
How can I do that? 我怎样才能做到这一点?
I tried: 我试过了:
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;
});
but it does not work properly. 但它不能正常工作。
Thanks 谢谢
You have to do it in one function. 你必须在一个功能中完成它。
Also, if x
values are the same, you must compare on y
values. 此外,如果
x
值相同,则必须比较y
值。
You can do it this way 你可以这样做
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);
You can do it in one line with Alasql JavaScript library. 您可以使用Alasql JavaScript库在一行中完成 。 This is an example:
这是一个例子:
var res = alasql('SELECT * FROM ? ORDER BY x,y',[data]);
Try this example at jsFiddle . 在jsFiddle上试试这个例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.