【问题标题】:Jquery compare function doesn't work on integersJquery比较函数不适用于整数
【发布时间】:2015-01-21 14:26:35
【问题描述】:

我正在尝试按最后 4 个子字符串排列我的数组,这些子字符串是数字,但它无法正常工作。 代码是

function sortArray(){
    top10.sort(function(a, b){
        var ax = a.substr(6, 4);
        var bx = b.substr(6, 4);
        return bx>ax;
        console.log(top10);
    });
}

top10 = [];
$.get('user_db_hm.txt', function(myContentFile)
        {
            top10 = myContentFile.split("\n");
            sortArray();
        }, 'text');

console.log 是

["骗子 - 9 ", "僵尸 - 8 ", "罗弗斯 - 7 ", "kombi - 6 ", "abcdf - 5", "约翰尼 - 4 ", "科里奥 - 22 ", "gosho - 2 ", "rapis - 14 ", "比绍 - 1 "]

【问题讨论】:

  • return 语句后调用console.log 时如何在控制台中获得输出?
  • top10拆分后的内容和上面显示的一样吗?如果是这样,当我记录 ax 和 bx 时,我会得到 - 8 - 6 这样的值
  • 我在控制台中调用了数组,我也可以看到结果,因为我将数组放在了div中。
  • 字符串不是数字。

标签: javascript jquery arrays sorting


【解决方案1】:

您需要返回由sort() 生成的新排序数组,并确保将子字符串转换为数字,以便正确比较它们。

试试这个:

function sortArray(){
    return top10.sort(function(a, b){
        var ax = Number(a.substr(7, 4));
        var bx = Number(b.substr(7, 4));
        return bx>ax;
    });
}

【讨论】:

  • 不客气 :) 如果它适合你,请接受答案
【解决方案2】:

你的程序有两个问题,

  1. 作为@A。 Wolff 说过您需要使用 parseInt 将字符串转换为 Intger
  2. 第二个 substr 返回数据为 - 22 这不是你想要的

所以,试试这个

top10.sort(function(a, b){
        var ax = a.substr(7, 4);
        var bx = b.substr(7, 4);
        ax.trim();
        bx.trim();
        return parseInt(bx)>parseInt(ax);
    });
console.log(top10);

还有,这是一个有效的Fiddle

【讨论】:

    【解决方案3】:

    jsBin demo

    function strNum(v){ return +v.match(/\d+/)||''; }
    
    function sortArray( arr ){
      arr.sort(function(a, b){
        var ax = strNum(a);
        var bx = strNum(b);
        return bx>ax;
      });
      console.log(arr);
    }
    
    
    $.get("user_db_hm.txt", function( data ){
      sortArray( data.split("\n") );
    }, "text");
    

    日志:

    [“kolio - 22”、“rapis - 14”、“dupes - 9”、“zombi - 8”、“rofls - 7”、“kombi - 6”、“abcdf - 5”、“johny - 4” ", "gosho - 2", "pesho - 1"]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多