按字母数字对javascript数组进行排序[重复]
Posted
技术标签:
【中文标题】按字母数字对javascript数组进行排序[重复]【英文标题】:Sort javascript array alphanumerically [duplicate] 【发布时间】:2018-11-02 00:52:10 【问题描述】:我有这个数组
const arr = ['1','2','3',...'30','31','LAST']
我需要按数字 ASC 排序
这是示例代码,我不知道如何排序。 请帮帮我
const arr2 = ['2','1','10','LAST','20']
我需要结果 ['1','2','10','20','LAST']
而不是 ['1','10','2','20','LAST']
【问题讨论】:
【参考方案1】:您可以检查 NaN
并将该值移至底部。
Array#sort
按字符串排序,不进行回调,不考虑字符串数值。
var array = ['2','ZIRST','1','10','LAST','20', 'Sara'];
array.sort((a, b) => isNaN(a) - isNaN(b) || a - b || a > b || -(a < b));
console.log(array);
【讨论】:
这个函数不能很好地对多个单词作为字符串的数组进行排序:['5','ZIRST','1','10','LAST','20','Sara' ]。它返回 ["1", "5", "10", "20", "ZIRST", "LAST", "Sara"] 而不是 ["1", "5", "10", "20", “LAST”、“Sara”、“ZIRST”] @MattYao,我在末尾添加了对字符串的排序。 不错的一个!整洁干净的代码。【参考方案2】:function sortArray(arr)
let sortedArr = arr.sort();
sortedArr.forEach((v, i) =>
if (!isNaN(parseInt(v)))
sortedArr[i] = parseInt(v);
else
sortedArr[i] = v;
);
return sortedArr.sort((a, b) => a - b).map(String);
// tests
console.log(sortArray(['2', '1','10','LAST','20']));
console.log(sortArray(['5','ZIRST','1','10','LAST','20', 'Sara']));
【讨论】:
【参考方案3】:您需要检查数组中的给定元素是否为数字,然后对数字和字符串进行相应的排序。您可以创建一个可重用的函数sortNumber
,这样它就可以用于多个数组,而无需一次又一次地重复相同的逻辑。
function sortNumber(a,b)
return isNaN(a) - isNaN(b) || a - b;
var inputArray = ['2','1','10','LAST','20'];
inputArray.sort(sortNumber);
console.log(inputArray);
inputArray = ['21','31','110','LAST','220'];
inputArray.sort(sortNumber);
console.log(inputArray);
【讨论】:
【参考方案4】:您可以使用localeCompare
对numeric
属性上的数组进行排序。
const array = ["1", "5", "10", "20", "ZERO", "LAST", "Sara"];
array.sort((a, b) => a.localeCompare(b,undefined,numeric: true));
console.log(array);
【讨论】:
【参考方案5】:您可以像这样使用自定义比较器:
var arr = ['2','1','10','LAST','20'];
arr.sort((a,b)=>
return parseInt(a) > parseInt(b) || isNaN(a);
);
【讨论】:
以上是关于按字母数字对javascript数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章