【问题标题】:Javascript String SortingJavascript字符串排序
【发布时间】:2014-11-29 17:50:59
【问题描述】:

当涉及到字符串时,我正试图用 Javascript 进行排序。 好的,所以我在这里有这个功能:

var numericalOrder = function(array){
    if(arguments.length === 0 || !Array.isArray(array)){
        throw new Error();
    }
    var anyChange;
    for(var i = 0; i < array.length - 1; i++){
        anyChange = false;
        for(var x = 0; x < array.length - 1; x++){
            if(array[x] > array[x + 1]){
                anyChange = true;
                var temp = array[x];
                array[x] = array[x + 1];
                array[x + 1] = temp;
            }
        }
        if(!anyChange){
            return array;
        }
    }
    return array;
};

当给定一个数字数组时,该函数将按数字顺序排列值,但我很困惑的是这个函数如何能够按字母顺序排列一个字符串数组。我知道 javascript 中有一个数组 sort() 方法,但我正试图完全掌握这个概念。任何帮助表示赞赏:)!

【问题讨论】:

  • 我认为您需要将“hasHadChange”更改为“anyChange”。
  • 是的,这是一个错字。糟糕!

标签: javascript sorting


【解决方案1】:

&gt; 可以比较字符串,因此即使数组成员是字符串,您的函数也能正常工作。

'a'&gt;'b' === false'c'&gt;'b' === true

【讨论】:

    【解决方案2】:

    您的函数将对数字和字符串进行排序,因为 JavaScript 会尝试使用 > 运算符比较任意两个变量,并且最好确保比较有意义。它甚至会尽其所能将操作数的类型强制转换为“相似”类型。因此,如果您比较“a”> 1,它将在进行比较之前将 1 转换为字符串“1”。但是如果你比较“0”> 1,我相信它会在进行比较之前将“0”变成0。这种类型转换在 JavaScript 中一直在发生,导致一些非常奇怪的结果,比如 "false" === true :)

    【讨论】:

    【解决方案3】:

    如果你想比较字符串,你可以使用 "".charCodeAt() (获取字符的 ascii 编号),但我会直接比较两个字符串,因为 "before"

    【讨论】:

      猜你喜欢
      • 2019-06-25
      • 1970-01-01
      • 2015-10-29
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 2011-02-17
      相关资源
      最近更新 更多