Сортировка чисел с помощью JavaScript

Я читаю некоторые цифры из локального файла, а затем пытаюсь отсортировать номера с помощью Javascript. Чтение осуществляется с помощью ActiveXObject, а сортировка - с помощью javascript.

Когда я не использую ActiveX, сортировка может быть выполнена, но при наличии Activex она не работает. Существуют ли какие-либо ограничения на использование таких функций при наличии ActiveX. Если кто-то может сказать мне, где код должен быть изменен, я был бы благодарен.

Вот код

<html>
<script>
var oRequest;
var i;
var numbers=new Array();
var b= new Array();
var j
var k;
var temp;
var temp1;

if(document.all) {
  oRequest = new ActiveXObject("Microsoft.XMLHTTP")
}
else {

  oRequest = new XMLHttpRequest();
}


oRequest.open("GET", "file:///C:/Test.txt", true);
oRequest.send(null);


numbers= oRequest.responseText.split("\n");


for(i=0;i<10;i++)
{
  for(j=0;j<9;j++)
  {
    if(numbers[j]>numbers[j+1])
    {
      temp=numbers[j+1];
      numbers[j+1]=numbers[j];
      numbers[j]=temp;
    }
  }}

document.write(numbers);
document.write("<br>");
</script>
</html> 

3 ответа

Решение

Массив numbers не содержит чисел, он содержит строки. Когда вы сравниваете их, они сравниваются как строки, а не числа.

Разобрать строки в массиве:

for (var i = 0; i < numbers.length; i++) numbers[i] = parseInt(numbers[i], 10);

AJAX (ваш XMLHTTP ActiveXObject), как указано в его имени (асинхронный JavaScript и XML), выполняет запрос асинхронно, что означает, что он планирует запрос GET для вашего test.txt другим потоком и продолжает выполнение остальной части JavaScript в основном потоке.

Вам нужно выполнить оставшуюся часть вашего javascript (сортировку) только ПОСЛЕ того, как AJAX-запрос завершен. Для этого вам нужно использовать событие onreadystatechange (информация здесь: http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp) и выполнять сортировку только тогда, когда readyState == 4 (4: запрос завершен и ответ готов) и статус == 200 (200: "ОК")

Разобрать ваши строки, чтобы получить числа, а затем, используйте sort Метод: http://wap.w3schools.com/jsref/jsref_sort.asp

РЕДАКТИРОВАТЬ: И Шокер прав, конечно.

Другие вопросы по тегам