Сортировка чисел с помощью 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
РЕДАКТИРОВАТЬ: И Шокер прав, конечно.