对项目数组(具有 X/Y 属性)进行排序,以便它们按从左到右、从上到下的顺序排列

发布于 2024-12-15 15:33:09 字数 372 浏览 0 评论 0原文

舞台上数组中的每个项目都有一个 x/y 位置。最左上角位置的项目应该是 items[0]。 X 应该是主要的。

在此处输入图像描述

最初我的想法是:

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

但这不会产生正确的结果。

Each item in the array in on the stage, each with an x/y position. The item in the top left most position should be items[0]. X should be the primary.

enter image description here

Originally I was thinking along the lines of:

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

But this does not yield the correct results.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

维持三分热 2024-12-22 15:33:09

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

这意味着您只需替换 &&< /code> 与 ||

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

sort() should return either 0 or a negative/positive number.

This sorts with X taking precedence:

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

This with Y taking precedence (the "natural" order):

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

Which means you just need to replace your && with ||:

return a.x - b.x || a.y - b.y
倦话 2024-12-22 15:33:09
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;
}
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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文