Javascript 满足if条件时的奇怪变量行为

Javascript 满足if条件时的奇怪变量行为,javascript,jquery,xml,Javascript,Jquery,Xml,我正在编写一个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

我正在编写一个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'));
}
函数初始化(){
ct=$('menu').children().length;

for(cati=0;cati至少您的for循环看起来很奇怪

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

您正在使用
cats[]
数组的迭代器
j
引用
realNames[]
数组。理论上,如果您总是获得相同数量的
cats[]
realNames[],这可能会起作用
在两个不同的数组中,您从不对它们进行排序,它们总是相互映射1对1,但这种方法很容易出错,这看起来不是一种可靠的方法。当然,for循环超出了范围。如前所述。

分配给
realnames
的位置在哪里?看起来您正在比较ng对象,它永远不会返回
true
。你能给我们看一下你的XML文件吗,这样我们就可以看到你在做什么了?@JonathanM它是另一个数组,它的长度相同(它来自第一个数组)realnames[]来自cats[]forsure的长度是一样的,我认为它与for无关,因为for循环正常运行,问题只发生在第二个循环的if条件下,我认为问题是在cats[j]@MRefaat请看,循环运行不正常。除非您希望它们超出边界。请看以下示例:我明白您的意思,但在for中声明变量后仍然存在问题
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(j=0;j<=cats.length;j++) {
    if(selecteditem == realnames[j]) {
            selecteditem = cats[j];
    }
}