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]
。添加解构或其他奇特的语法不会改变基本模式。