JavaScript,如何通过两个子索引对数组进行排序

标签 javascript sorting

我正在尝试对两个子索引上的 xy 坐标进行排序,它曾经表示行列 Asc 顺序。我已经通过 Y 对坐标数据进行了排序,但是当我再次通过 X 对该数据进行排序时,我丢失了 Y 顺序,所以知道该怎么做吗?

我做了什么

例子:我的原始坐标xy数据

var cxray = [ [450,13],[455,12],[454,12],[451,12],[452,13],[453,12], [450,12],[453,13],[454,13],[450,13],[452,12],[455,13],];

我的单索引排序函数

 this.ray_isort = function(data,i){
    data.sort( function( a, b ,sindex=i){if ( parseFloat(a[sindex]) == parseFloat(b[sindex]) ) return 0;return parseFloat(a[sindex]) < parseFloat(b[sindex]) ? -1 : 1;});
    return data;
  };

fiddle 链接:JSFIDDLE

目前,当我用一个索引对它进行排序时,我得到了输出

0  451,12
1  454,12
2  450,12
3  453,12
4  455,12
5  452,12
6  452,13
7  453,13
8  454,13
9  450,13
10  450,13
11  455,13

我的目标是得到

0  450,12
1  451,12
2  452,12
3  453,12
4  454,12
5  455,12
6  450,13
7  451,13
8  452,13
9  453,13
10  454,13
11  455,13

最佳答案

a[1] - b[1] 将使用每个数组的第二项对数组进行排序。

如果它们相等,结果将为 0,因此 a[0] - b[0] 部分将被执行,并将使用第一项。

const cxray = [ [450,13],[455,12],[454,12],[451,12],[452,13],[453,12], [450,12],[453,13],[454,13],[450,13],[452,12],[455,13],];

console.log(cxray.sort((a, b) => a[1] - b[1] || a[0] - b[0]));

关于JavaScript,如何通过两个子索引对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45101824/

相关文章:

Javascript console.log 使用变量

c - 当我在 Quicksort5 函数中激活该行时,它的排序效果不佳。但为什么?

sorting - Pandas 按行对列排序

PHP 通过另一个数组(表)按键对数组进行排序

javascript - Meteor 无法退出方法

javascript - 在内容为 It's value 的选定元素上显示提示

javascript - NodeJS 通过中间件发送图像(可能会被修改)到客户端

javascript - 如何为 JSON API 创建复杂的 javascript 对象

python - 重新组合 Pandas df 中的列值

javascript - 数组排序日期未按预期工作