【问题标题】:Sort javascript array alphanumerically [duplicate]按字母数字对javascript数组进行排序[重复]
【发布时间】: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']

【问题讨论】:

    标签: javascript


    【解决方案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);
          });
          

          【讨论】:

            猜你喜欢
            • 2021-07-13
            • 2020-08-24
            • 2011-10-06
            • 2014-05-14
            • 2013-11-02
            • 1970-01-01
            • 1970-01-01
            • 2015-04-05
            相关资源
            最近更新 更多