JavaScript 排序多维数组

3
我想要对一个包含多个双精度浮点数的多维数组进行排序。
该数组如下所示:[[1,2],[2,3],[5,6],[8,9]]
我想按照X值对其进行排序,并保持x,y值的配对关系。
我在网站上搜索了多维排序,找到了像这些线程,其中排序函数被修改为:
location.sort(function(a,b) {

  // assuming distance is always a valid integer
  return parseInt(a.distance,10) - parseInt(b.distance,10);

});

我不确定如何修改这个函数使其适合我。
3个回答

5

只需要比较数组的值 -

var myarray =  [[1,2],[2,3],[5,6],[8,9]];

myarray.sort(function(a,b) { return a[0] - b[0]; });

谢谢,我猜那很显然! - tbogatchev

2

您只需要比较您想要的ab的部分。对于数字,您可以使用它们之间的差异:

location.sort(function(a, b){
    return a[0] - b[0];
});

请注意,您提供的数组已经按每个数组中第一个值排序。如果您想按降序排序,可以执行以下操作:
location.sort(function(a, b){
    return b[0] - a[0];
});

1
最安全的方法是按照您在问题中所述,使用数字键来完成此操作:
location.sort(function(a,b) { return a[0]-b[0]; })

如果恰好每个子数组的第一个元素始终是单个数字:
location.sort(); 
//only works if first element in child arrays are single digit (0-9)
//as in the example: [[1,2],[2,3],[5,6],[8,9]]
//[[1,2],[22,3],[5,6],[8,9]] - will not work as 22 is not a single digit

也许作为注释有用,但这个答案会让某人感到困惑。 - Evan Davis
@Mathletics 这是一个答案 - 如果第一个元素(x)是单个数字,则location.sort()可以工作。这不是一个解决方案吗? - MDEV
有些新手可能会读到这个,错过了关于单个数字的部分(不理解默认情况下排序是字符串比较,这就是为什么它能正常工作),然后又会问一个很容易通过阅读MDN得到答案的问题。 - Evan Davis
@Mathletics 我已经尝试让它更明显 - 但我觉得保留它是值得的,因为这样更简单易读,代码管理起来也更少(如果可以安全使用的话)。 - MDEV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接