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

时间:2017-07-14 11:25:35

标签: 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;
  };

小提琴链接: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

2 个答案:

答案 0 :(得分:3)

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

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

&#13;
&#13;
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]));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

cxray.sort(([ax,ay],[bx,by])=>ay-by||ax-bx);

首先简单地排序。如果ay等于,ay-by将为0,所以感谢or运算符,它将在x之后排序。