0

我使用以下代码查找未在我的观察列表(项目数组列表)中列出的那些项目。但是每当我运行这段代码时,浏览器就会冻结。如果我删除最后一个else部分,那么程序运行良好并打印 rss 提要中的观察列表中的项目。

谁能告诉我我的其他部分出了什么问题,它没有打印在观察列表中找不到的项目?我的目标是能够打印那些在我的观察列表数组中找不到的来自 rss 提要的项目。我的观察列表数组中有大约 700 个项目,RSS 大约有 1000 个项目!

<script>
$.getJSON('http://anyorigin.com/get?url=http://www.somesite.com/rss.php&callback=?', function(data){

var p=0;

 var siteContents = data.contents;
var parser=new DOMParser();
xmlDoc=parser.parseFromString(siteContents,"text/xml");

var items = xmlDoc.getElementsByTagName("item");


for(i = 0; i < items.length; i++)
{

document.myform2.outputtext2.value +=items[i].getElementsByTagName("itemname")[0].childNodes[0].nodeValue+"\n";


var myVariable =items[i].getElementsByTagName("itemname")[0].childNodes[0].nodeValue;



items=["mango","apple","orange","banana","book","pen"];



              for (var m=0;m<items.length;m++)
              {

                    if (myVariable == items[m])
                    //if (items[m] == myVariable)
                    { 
                      //do nothing

                        p++;
                       document.myform3.outputtext3.value +=myVariable+"\n";
                    }
                    else
                    {
                         //alert (myVariable);
                     document.myform4.outputtext4.value +=myVariable+"\n";

                    };
             };



 };//end of outer for

});


</script>
4

1 回答 1

1

你的逻辑是颠倒的。您当前的脚本(带有else语句)会在每次不等于监视列表之一时打印一个项目 - 每个项目都会打印多次,因为您的监视列表很长;这使得该输出中有 700000 行!

您必须将该条件移到循环之外。伪代码:

found = false
foreach item in watchlist
    if item == myvariable // the one you're searching for
        found = true
        break

if found
then putItSomewhere()
else putItSomewhereElse()

在实际脚本中,您不会使用循环,而只是使用indexOfArray 方法

if (items.indexOf(myVariable) == -1) {
    // not found, so output it
    document.myform4.outputtext4.value +=myVariable+"\n";
}
于 2013-07-19T23:37:11.500 回答