按字母数字排序javascript数组

时间:2018-05-23 06:43:22

标签: javascript

我有这个数组

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']

5 个答案:

答案 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)

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

您可以使用localeComparenumeric属性上的数组进行排序。

&#13;
&#13;
const array = ["1", "5", "10", "20", "ZERO", "LAST", "Sara"];
array.sort((a, b) => a.localeCompare(b,undefined,{numeric: true}));
console.log(array);
&#13;
&#13;
&#13;