Как правильно отсортировать данные, возвращаемые из файла XML? - PullRequest
0 голосов
/ 18 февраля 2019

, который я хочу отсортировать в порядке возрастания по ДАТЕ после этого вызова ajax

function parseXML(xml){

    var weatherArray = [];
    var weatherElement = xml.getElementsByTagName("forecast")[0];
    weatherArray.queryTime = weatherElement.getAttribute("queryTime");
    weatherArray.queryLocation = weatherElement.getAttribute("queryLocation");
    weatherArray.weatherList = [];


    function s(a,b){
        return parseInt(a.getElementsByTagName("date")[0].childNodes[0].nodeValue) - parseInt(b.getElementsByTagName("date")[0].childNodes[0].nodeValue);
        }
        var weatherElements = weatherElement.getElementsByTagName("weather");
        weatherElements=weatherElements.sort(s);

    for(var i=0; i< weatherElements.length; i++){
        var weather = {};
        weather.year = Number(weatherElements[i].getElementsByTagName("year")[0].childNodes[0].nodeValue);
        weather.month = Number(weatherElements[i].getElementsByTagName("month")[0].childNodes[0].nodeValue);
        weather.date = Number(weatherElements[i].getElementsByTagName("date")[0].childNodes[0].nodeValue);
        weather.dayOfWeek = weatherElements[i].getElementsByTagName("dayOfWeek")[0].childNodes[0].nodeValue;
        weather.overall = weatherElements[i].getElementsByTagName("overall")[0].childNodes[0].nodeValue;
        weather.overallCode = weatherElements[i].getElementsByTagName("overallCode")[0].childNodes[0].nodeValue;
        weather.highest = Number(weatherElements[i].getElementsByTagName("highest")[0].childNodes[0].nodeValue);
        weather.lowest = Number(weatherElements[i].getElementsByTagName("lowest")[0].childNodes[0].nodeValue);
        weatherArray.weatherList.push(weather);
    }
    return weatherArray;
}

, чтобы при появлении данных в браузере они начинались со строки данных, в которой сначала отображается запись из ДАТЫ 26затем 27 секунд и 28 ..... есть еще повторяющиеся данные в XML, которые я не включил все здесь.

Что я делаю не так?

1 Ответ

0 голосов
/ 18 февраля 2019

Вот рабочее решение:

var weatherElements = [];
var weatherElementsArr = weatherElement.getElementsByTagName("weather");

for (var i in weatherElementsArr) {
    if (weatherElementsArr[i].nodeType == 1) {
        weatherElements.push(weatherElementsArr[i]);
    }
}

weatherElements.sort(s);

Проблема была здесь:

var weatherElements = weatherElement.getElementsByTagName("weather");
    weatherElements=weatherElements.sort(s);

Значение weatherElements было HTMLCollection, которое вы не можете отсортировать, потому чтоэто не нативный массив javascript.Это коллекция элементов HTML.

Создав массив с элементами узлов, вы теперь можете отсортировать их, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...