21

というオブジェクトの配列がありますcanvasObjects

各オブジェクトには、 と呼ばれる属性がありますz

オブジェクトに基づいてこの配列をソートしたいzsort()メソッドを使用してこれを行うにはどうすればよいですか?

4

3 に答える 3

27

sort 関数にコンパレータを渡すだけです。

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

canvasObjects.sort(compare);

またはインライン

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

この投稿を見る

于 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」の減算を返す無名関数を sort メソッドに送信します。

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 に答える