2014-10-05 73 views
0

我想围绕用Javascript排序我的头,当涉及到字符串。 行,所以我有这样的功能在这里: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()方法,但我试图完全理解这个概念。任何帮助表示赞赏:)!

+0

我认为你需要将“hasHadChange”改为“anyChange”。 – HeadCode 2014-10-05 06:08:29

+0

是的,这是一个错字。哎呀! – ObiJuan 2014-10-05 08:22:00

回答

1

>可以比较字符串,所以即使数组成员是字符串,你的函数也能工作。

'a'>'b' === false'c'>'b' === true

0

的功能将数字和字符串进行排序,因为JavaScript的将尝试任何两个变量>操作符来进行比较,做到最好,以确保比较才有意义。它甚至会将操作数的类型尽可能强制转换为“类似”类型。因此,如果比较“a”> 1,则在进行比较之前将1转换为字符串“1”。但是如果比较“0”> 1,我相信它会在比较之前将“0”变为0。这种类型转换总是在JavaScript中发生,导致一些非常奇怪的结果,例如“false”=== true :)

+0

有关关系运算符类型更多细节http://stackoverflow.com/questions/14687876/how-do-the-javascript-relational-comparison-operators-coerce-types – 2014-10-05 05:28:22

0

如果要比较字符串您可以使用“”.charCodeAt()一个字符的ascii数字)但我会直接比较这两个字符串,因为“之前”<“之后”===假