2011-11-13 12 views
3

配列内の各項目は、x/yの位置にあります。一番左上のアイテムはアイテム[0]でなければなりません。 Xがプライマリである必要があります。項目の配列を(X/Yプロパティを使用して)左から右、上から下に並べるように並べ替えます。

enter image description here

もともと私はの線に沿って考えていた:

var items = [m1, m2, m3, m4, m5, m6]; 

items.sort(sortMe);  

function sortMe(a, b) 
{ 
    return (b.position[0] - a.position[0]) && (b.position[1] - a.position[1]); 
} 

しかし、これは正しい結果が得られていません。

答えて

7

sort()は、0または負の数を返す必要があります。

これはXを取って順位を並べ替え:

function sortByPosition(a, b){ 
    if (a.y == b.y) return a.x - b.x; 
    return a.y - b.y; 
} 

あなたは自分の&&||とを交換する必要があることを意味:

function sortByPosition(a, b){ 
    if (a.x == b.x) return a.y - b.y; 
    return a.x - b.x; 
} 

この( "ナチュラル" の順序)の優先順位を取ってYと:

return a.x - b.x || a.y - b.y 
+0

実際には、 'sort()'は正、負またはゼロを返すことができます。 1または-1である必要はありません。 – jfriend00

+0

@Ricardo質問に「make X primary」と表示されます。あなたのコードはそうではありません。 –

+0

は、Xが優先されるように修正されました。 –

0
function sortMe(a, b) 
{ 
    if(a.position[0]<b.position[0] || (a.position[0]==b.position[0] && a.position[1]<b.position[1])) return 1; 
    if(a.position[0]==b.position[0] && a.position[1]==b.position[1]) return 0; 
    return -1; 
} 
関連する問題