javascript - 按 2 个属性对对象数组进行排序

标签 javascript jquery sorting

我有一个这样的对象数组:

[ {x: 1, y: 4}, {x: 1, y: 2}, {x: 1, y: 3},
  {x: 3, y: 4}, {x: 3, y: 2}, {x: 3, y: 9},
  {x: 2, y: 5}, {x: 1, y: 0}, {x: 1, y: 2} ]

我想这样排序:

[ {x: 1, y: 2}, {x: 1, y: 3}, {x: 1, y: 4},
  {x: 2, y: 0}, {x: 2, y: 2}, {x: 2, y: 5},
  {x: 3, y: 2}, {x: 3, y: 4}, {x: 3, y: 9} ]

所以规则是:数组必须首先按 x 属性排序,然后按 y 属性排序必须遵守第一个排序。

我该怎么做?

我试过:

array.sort(function(a, b){
 var elema = a["x"] ;
 var elemb = b["x"] ;
 if (elema < elemb) 
  return -1;
 if (elema > elemb)
  return 1;
 return 0;
});

array.sort(function(a, b){
 var elema = a["y"] ;
 var elemb = b["y"] ;
 if (elema < elemb) 
  return -1;
 if (elema > elemb)
  return 1;
 return 0;
});

但它不能正常工作。

谢谢

最佳答案

你必须在一个函数中完成它。
此外,如果 x 值相同,则必须比较 y 值。

你可以这样做

function SortMyObjects(a, b) 
{
   if (a.x < b.x)
      return -1;

   if (a.x > b.x)
      return 1;

   // a.x == b.x so compare y values
   if (a.y < b.y)
      return -1;

   if (a.y > b.y)
      return 1;

   // perfect equality
   return 0;
}

// sort your array
array.sort(SortMyObjects);

关于javascript - 按 2 个属性对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25699290/

相关文章:

javascript - 如何优化 javascript/jquery 代码以加快其性能?

javascript - jQuery 验证验证错误字段

php - 如何选择一些具有特定值的行并在mysql中对它们进行排序

c++ - 使用 C++ 库根据键对对象进行排序的最快方法是什么?

c# - 将 IP 字符串列表排序为具有空白条目的数字

javascript - jQuery 验证引擎不适用于 Bootstrap Select 插件

javascript - 从 1 到 100,如果是 3 的倍数则打印 "ping",如果是 5 的倍数则打印 "pong",否则打印数字

javascript - 将 URL 与 json 值组合

javascript - 对 Spotify Web API 的身份验证请求被拒绝

javascript - 每 24 小时进行一次不同的 Google 地球游览(无人)