Сортируйте массив элементов (со свойствами X / Y), чтобы они располагались слева направо, сверху вниз - PullRequest
3 голосов
/ 13 ноября 2011

Каждый элемент в массиве на сцене, каждый с позицией x / y.Элемент в верхней левой позиции должен быть items [0].Х должен быть основным.

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]);
}

Но это не дает правильных результатов.

Ответы [ 2 ]

7 голосов
/ 13 ноября 2011

sort() должен возвращать либо 0, либо отрицательное / положительное число.

Сортируется с X с приоритетом:

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

Это с Y, имеющим приоритет («естественный» порядок):

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

Это означает, что вам просто нужно заменить && на ||:

return a.x - b.x || a.y - b.y
0 голосов
/ 13 ноября 2011
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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...