0

次のコードを使用して、ウォッチ リスト (items 配列リスト) にリストされていないアイテムを見つけます。しかし、このコードを実行するたびにブラウザがフリーズします。最後の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ステートメントを含む) は、ウォッチリストの 1 つと等しくないたびにアイテムを出力します。すべてのアイテムは、ウォッチリストが長いのと同じ回数だけ出力されます。その出力で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 に答える