在JavaScript中对混合的字母/数字数组进行排序

时间:2019-08-23 11:04:09

标签: javascript ecmascript-6

我有一个混合数组,需要先按数字然后按字母排序

var x = ['1','2A','2B','2AA','2','10A','10','11','12A','12B','12']
  

所需的输出

sortedArray = ['1','2','2A','2B','2AA','10','10A','11','12','12A','12B']

我曾经尝试过使用lodash,但没有得到想要的结果

var x = ['1','2A','2B','2AA','2','10A','10','11','12A','12B','12']

_.sortBy(x);

//lodash result

 ["1", "10", "10A", "11", "12", "12A", "12B", "2", "2A", "2AA", "2B"]

2 个答案:

答案 0 :(得分:3)

您可以使用parseInt获取数字部分并sort。如果ab的编号相同,则根据其length对它们进行排序。如果它们的长度相同,则使用localeCompare

将它们按字母顺序排序

let array = ['1','2A','2B','2AA','2','10A','10','11','12A','12B','12'];

array.sort((a, b) => parseInt(a) - parseInt(b) 
                  || a.length - b.length 
                  || a.localeCompare(b));
                  
console.log(array)

答案 1 :(得分:2)

您可以使用自定义sot函数,在自定义函数中分别将数字和非数字分开,并基于num进行排序,如果两者相等,则比较非数字部分。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = Schema({

  categories:{
    type: array,
    "default": []
  }
});

module.exports = mongoose.model('User', UserSchema);

相关问题