按字母数字对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】:

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

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数组进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中对字母数字数组进行排序[重复]

数组列表排序[重复]

JavaScript数字数组怎么按数字大小排序?

首先按字母顺序对对象数组进行排序,然后按数字排序

数组列表排序[重复]

JavaScript sort函数的使用