我有这个数组
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']
答案 0 :(得分: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);
答案 1 :(得分:1)
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']));
&#13;
答案 2 :(得分:0)
您需要检查数组中给定元素是否为数字,然后根据数字和字符串对其进行相应排序。您可以创建一个可重用的函数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);
答案 3 :(得分:0)
您可以使用这样的自定义比较器:
var arr = ['2','1','10','LAST','20'];
arr.sort((a,b)=>{
return parseInt(a) > parseInt(b) || isNaN(a);
});
答案 4 :(得分:0)
您可以使用localeCompare
对numeric
属性上的数组进行排序。
const array = ["1", "5", "10", "20", "ZERO", "LAST", "Sara"];
array.sort((a, b) => a.localeCompare(b,undefined,{numeric: true}));
console.log(array);
&#13;