为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2021-10-29 15:54:38
我有一个数组的数组,其值如下: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 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

使用自定义比较器


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


查看完整回答
反对 回复 2021-10-29
?
守候你守候我

TA贡献1802条经验 获得超10个赞

根据 '.' 拆分字符串 然后分别比较每个部分,如下所示 -


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


查看完整回答
反对 回复 2021-10-29
  • 3 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信