js将数组中的字符串按照第二个字符的大小排序(sort排序)

js将数组中的字符串按照第二个字符的大小排序(sort排序)

输入为:[“abc”,“bac”,“acb”,“acg”,“acz”]

输出为:[“bac”,“abc”,“acb”,“acg”,“acz”]

排序的规则为:按照第二个字符的大小进行排序,例如“abc”中第二个字符为b,“bac”第二个字符为a,那么“bac”排在“abc”的前面;如果第二个字符大小也相同,则按照第三个字符的大小进行排序,以此类推,直至比较出大小;如果两个数字完全相同则顺序不变。

写这个缘由是因为网上搜的代码感觉没效果就自己写了一个排序的方法,也根据sort()进行些处理,中间自己做了些逻辑处理,底下时自己写的代码需要的可以参考

*/
    // 根据数组字母进行排序
    /* 
    如果没有指明 compareFunction ,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。例如 "Banana" 会被排列到 "cherry" 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 "80" 要比 "9" 要靠前。
    如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
    如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
    如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
    如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
    compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。
    */
    const months = ["March", "Jgn", "Feb", "Dccc","Fec"]; // March Dccc Feb Jgn
    let compute = function (a, b) {
      // 根据第几个字母排序可以自己通过截取来实现,这里就不多说了
      c = a.substr(1, 1);
      d = b.substr(1, 1);
      if (c > d) {
        return 1;
      }
      if(c==d){
        // 当两个值的字母相同时,再次调用,将进行下一步比对,直到比对出不同为止
        e=a.substring(1)
        f=b.substring(1)
        compute(e,f)
      }
      if (c < d) {
        return -1;
      }
    };
    console.log(months.sort(compute));//["March", "Dccc", "Feb", "Fec", "Jgn"]

这是控制台输出结果
在这里插入图片描述
第一次写不对之处,多多包涵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值