用点分隔符对字符串的数组号进行排序

时间:2019-09-26 03:36:19

标签: javascript arrays sorting

我有一个数组,其值如下:

arr = [
  ['1','lorem'],
  ['2','ipsum'],
  ['1.1','sit'],
  ['1.2','lorem'],
  ['3','ipsum'],
  ['1.3','sit'],
  ['1.4','sit'],
  ['1.5','lorem'],
  ['4','ipsum'],
  ['1.6','sit'],
  ['1.7','sit'],
  ['1.8','sit'],
  ['1.9','lorem'],
  ['5','ipsum'],
  ['1.10','sit']
]

按以下方式分类:

arr = [
  ['1','lorem'],
  ['1.1','sit'],
  ['1.2','lorem'],
  ['1.3','sit'],
  ['1.4','sit'],
  ['1.5','lorem'],
  ['1.6','sit'],
  ['1.7','sit'],
  ['1.8','sit'],
  ['1.9','lorem'],
  ['1.10','sit']
  ['2','ipsum'],
  ['3','ipsum'],
  ['4','ipsum'],
  ['5','ipsum'],

]

我已经使用localCompare进行排序,但是实际上它是无效的排序,因为1.10的值在1.2或1.3之前列出。我需要的1.2是在1.10或1.11之前排序的,依此类推。

3 个答案:

答案 0 :(得分:2)

尝试使用String.prototype.localeCompare()

数字选项
  

grepl("illegal parking.*obstruction|obstruction.*illegal parking", Text1, ignore.case=TRUE)
  是否应使用数字排序规则,例如“ 1” <“ 2” <“ 10”。可能的值为numerictrue;默认值为false

false

答案 1 :(得分:0)

基于'。'分割字符串然后分别比较每个部分,如下所示-

var arr = [
  ['1','lorem'],
  ['2','ipsum'],
  ['1.1','sit'],
  ['1.2','lorem'],
  ['3','ipsum'],
  ['1.3','sit'],
  ['1.4','sit'],
  ['1.5','lorem'],
  ['4','ipsum'],
  ['1.6','sit'],
  ['1.7','sit'],
  ['1.8','sit'],
  ['1.9','lorem'],
  ['5','ipsum'],
  ['1.10','sit']
]

var sortedArr=arr.sort((a,b)=>{
  var aArr=a[0].split('.');
  var bArr=b[0].split('.');
  if(aArr[0]!==bArr[0]) {
    return aArr[0]-bArr[0];
  }
  else {
    if(aArr.length===1) {
      return -1
    }
    if(bArr.length===1) {
      return 1;
    }
    return parseInt(aArr[1])-parseInt(bArr[1]);
  }
})

console.log(JSON.stringify(sortedArr));
// [["1","lorem"],["1.1","sit"],["1.2","lorem"],["1.3","sit"],["1.4","sit"],["1.5","lorem"],["1.6","sit"],["1.7","sit"],["1.8","sit"],["1.9","lorem"],["1.10","sit"],["2","ipsum"],["3","ipsum"],["4","ipsum"],["5","ipsum"]]

答案 2 :(得分:0)

使用自定义比较器

function sorta(a, b) {
    let [numA, decA] = a[0].split(".");
    let [numB, decB] = b[0].split(".");
	if (numA != numB) {
		return numA - numB;	    
	} else {
		return decA-decB
    }
} 

arr = [
  ['1','lorem'],
  ['2','ipsum'],
  ['1.1','sit'],
  ['1.2','lorem'],
  ['3','ipsum'],
  ['1.3','sit'],
  ['1.4','sit'],
  ['1.5','lorem'],
  ['4','ipsum'],
  ['1.6','sit'],
  ['1.7','sit'],
  ['1.8','sit'],
  ['1.9','lorem'],
  ['5','ipsum'],
  ['1.10','sit']
]

console.log(arr.sort(sorta))