2014-10-05 1 views
0

Я пытаюсь обернуть свою голову вокруг сортировки в Javascript, когда дело доходит до строк. Ok так что я эта функция здесь:Строка 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

+0

Да, это была опечатка. К сожалению! – ObiJuan

ответ

1

> может сравнивать строки, чтобы ваша функция работала, даже если элементы массива являются строками.

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

0

ваша функция будет сортировать числа и строки, потому что JavaScript будет пытаться сравнить любые две переменные с оператором>, и сделать это лучше, чтобы гарантировать, что сравнение будет иметь смысл. Он даже будет принуждать тип операндов к типам «как», насколько это возможно. Поэтому, если вы сравните «a»> 1, он превратит 1 в строку «1» перед проведением сравнения. Но если вы сравните «0»> 1, я считаю, что перед сопоставлением он превратит «0» в 0. Это преобразование типа происходит все время в JavaScript, что приводит к некоторым очень странным результатам, таким как «false» === true :)

+0

Подробнее о типе coerceon с реляционными операторами http://stackoverflow.com/questions/14687876/how-do-the-javascript-relational-comparison-operators-coerce-types –

0

Если вы хотите сравнить строки, вы можете использовать «.charCodeAt() (который получает ascii число символов), но я бы сравнил сразу обе строки с «до» < «после» === false