21

我有一个名为canvasObjects.

每个对象都有一个名为 的属性z

我想根据 objects 对这个数组进行排序z。如何使用该sort()方法执行此操作?

4

3 回答 3

27

You just need to pass in a comparator to the sort function

function compare(a,b) {
  if (a.attr < b.attr)
     return -1;
  if (a.attr > b.attr)
    return 1;
  return 0;
}

canvasObjects.sort(compare);

Or inline

canvasObjects.sort(function(a,b) {return (a.attr > b.attr) ? 1 : ((b.attr > a.attr) ? -1 : 0);} );

See this POST

于 2013-03-24T00:59:50.997 回答
7

尝试了此处发布的其他答案,但后来我发现以下方法效果最好。

升序

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

降序

canvasObjects.sort(function(a,b) { return parseFloat(b.z) - parseFloat(a.z) } );
于 2013-03-24T01:27:04.103 回答
2

将匿名函数发送到返回属性“z”的减法的排序方法

var arr = [{z:2},{z:4},{z:5},{z:1},{z:3}];

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

上面将 z 中的数字按 1、2、3、4、5 排序。要反转顺序,使其返回“bz - az”。

于 2013-03-24T01:06:58.980 回答