Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按数组的两个元素对数组进行排序?_Javascript_Arrays_Sorting - Fatal编程技术网

Javascript 如何按数组的两个元素对数组进行排序?

Javascript 如何按数组的两个元素对数组进行排序?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个字符串数组,我做了一个数字数组。现在我有了两个元素的数组。我想对这两个元素从最小到最大进行排序: 现在的情况是: const numArray = array.map(str => parseInt(str)) console.log(numArray) [15, 5] [3, 55] [25, 5] [3, 10] [15, 25] 我想得到: [3, 10] [3, 55] [15, 5] [15, 25] [25, 5] 如何做到这一点?我想我需要使用.reduce()或

我有一个字符串数组,我做了一个数字数组。现在我有了两个元素的数组。我想对这两个元素从最小到最大进行排序:

现在的情况是:

const numArray = array.map(str => parseInt(str))
console.log(numArray)
[15, 5]
[3, 55]
[25, 5]
[3, 10]
[15, 25]
我想得到:

[3, 10]
[3, 55]
[15, 5]
[15, 25]
[25, 5]

如何做到这一点?我想我需要使用
.reduce()
.sort()
,但不知道如何正确使用。我很高兴能得到任何帮助。

我们第一次通过第一个数字比较
a[0]-b[0]
。如果我们得到相同的
a
b
,那么我们按照第二个数字
a[1]-b[1]
排序

const arr=[
[15, 5],
[3, 55],
[25, 5],
[3, 10],
[15, 25]
];

log(arr.sort((a,b)=>a[0]-b[0]|a[1]-b[1])您可以创建自己的自定义排序函数来比较第一个元素,如果两个子数组中的第一个元素相等,则比较第二个元素:

numaray.sort((a,b)=>{
res=a[0]-b[0];
如果(res!=0){
返回res;
}
返回a[1]-b[1];
});

您可以转换为字符串并使用自然排序

const数组=[[15,5]、[3,55]、[25,5]、[3,10]、[15,25];
sort((a,b)=>a.toString().localeCompare(b,未定义,{numeric:true,sensitivity:'base'}));

forEach(a=>console.log(…a))这是否回答了您的问题?不太可能,但是下面已经给出了答案,感谢大家的帮助,我将去整理排序选项。属于或者,一般来说,@Sasha“不是真的” — 是的,因为它完全是相同的惯用模式:
.sort((value1,value2)=>
 ⟨表达⟩ <代码>)
,其中⟨表达⟩ 是由
value1[numProperty]-value2[numProperty]
value1[strProperty].localeCompare(value2[strProperty])
或其否定(降序)组成的
|
链。在您的例子中,您有数字属性,您希望按索引
0
排序,然后按索引
1
排序,两者都是升序,所以⟨表达⟩ 变成
value1[0]-value2[0]| value1[1]-value2[1]
。添加解构或其他奇特的语法不会改变基本模式。