странное поведение переменной при выполнении условия if

0

Я пишу JS- код, который читает XML файл и извлекает из него необходимую информацию, я хочу найти имя выбранного элемента, это мой код:

function initialize() {
    ct = $('menu').children().length;

    for(cati=0;cati<=ct-1;cati++) {
        cats[cati] = $('menu').children().eq(cati).prop('nodeName');
    }

    var selecteditem = $(".selected").text();

    for(j=0;j<=cats.length;j++) {
        if(selecteditem == realnames[j]) {
                selecteditem = cats[j];
        }
    }

    $("#gallery").empty();
    alert($('menu').find(selecteditem).prop('nodeName'));
}

здесь, в моем коде при предупреждении с использованием последнего stmt есть два сценария, первый - когда условие if statement не достигнуто, и в этом случае предупреждение дает мне желаемый результат (выбранный элемент), но когда if statement состояние достигнуто, оповещение дает мне undifined хотя я уверен, что cats[j] является элементом в файле XML.

  • 0
    где realnames ?
  • 0
    Похоже, вы сравниваете объекты, которые никогда не вернут true .
Показать ещё 2 комментария
Теги:

1 ответ

1

По крайней мере, ваши циклы выглядят странно

// Always use them like this
for (var i = 0;i < arr.length;i++){
    // do stuff with arr[i]
}

Смотрите, в вашем первом цикле вы получили

for (var i = 0;i <= arr.length-1;i++){
    // do stuff with arr[i]
}

А во втором

for (var i = 0;i <= arr.length;i++){
    // do stuff with arr[i]
}

Вы должны придерживаться одного способа объявления for loops. Нет необходимости сокращать из arr.length если вы используете < operator для сравнения я и arr.length. Не <= оператор. Во втором цикле вы выходите из границ массива.


Еще одна странная вещь, которую вы получили там. Когда вы зацикливаете массив кошек.

for(j=0;j<=cats.length;j++) {
    if(selecteditem == realnames[j]) {
            selecteditem = cats[j];
    }
}

Вы ссылаетесь на realNames[] с итератором j массива cats[]. Хотя теоретически это может работать, если вы всегда получали одинаковое количество cats[] и realNames[] в 2 разных массивах, и вы никогда не сортируете их, и они всегда действительно сопоставляют друг с другом 1 к 1, но этот подход уязвим для ошибок, этот не выглядит надежным способом обойти это. Плюс, конечно, цикл for выходит за пределы. Как упоминалось ранее.

  • 0
    действительные имена [], полученные от cats [] и forsure, имеют одинаковую длину, также я думаю, что это не цикл for, а цикл for работает нормально, и проблема возникает только при выполнении условия if второго цикла.
  • 0
    я думаю, что дело в кошках [j]
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню