3

変数値が localStorage 値と等しくない場合にコードを実行する if ステートメントがあります。

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

   tweetID = tweets[i][0].id_str;

   if(tweetID != localStorage['tweet_id']){
       alert("new tweet"); 
       localStorage['tweet_id'] = tweetID;
       console.log(localStorage['tweet_id']);
   }
}

私の問題は、値が localStorage 値と決して等しくないことを示す if ステートメント内に常に入っていることです。このコードを初めて実行すると、'tweet_id' localStorage 項目が定義されていないため、常に if ステートメントに入ります。内部に入ると、私のコードでわかるように、「tweetID」値を localStorage 値に書き込む必要があります。ページは 30 秒ごとに更新されます。新しいツイートがない場合、これらの値は一致する必要があり、if ステートメントには含まれません。

これはそうではありません。私は何を間違っていますか?

console.log を使用すると、これらの値は最初に if ステートメントに入った後に一致するため、tweetID の値が変更されない限り、そこに再び入ることはありません。どんなアイデアでも大歓迎です!

4

2 に答える 2

1

試す:

if(tweeting !=JSON.parse(localStorage['tweet_text']))

または:

if(JSON.stringify(tweeting) != localStorage['tweet_text'])

オブジェクトを JSON と比較していますが、同じになることはありません。

于 2013-03-17T13:44:15.097 に答える
0

データは「for」ループ内にあるため、SINGLE ローカル ストレージ項目の値は、ループが終了するまで各ツイード ID によって上書きされます。これは、localStorage アイテムの最終的な値が、常に for ループの最後のツイート ID になることを意味します。このため、両方の値が一致することはなく、常に「if」ステートメント内に入ります。

@hodaya の回答のおかげで、JSON オブジェクトの値も、localStorage アイテムと比較する前に文字列に変換する必要があります。これは、localStorage が値を文字列としてのみ格納するためです。@hodayaの回答にある例から。「JSON.stringify」は配列を JSON 文字列に変換するために使用され、「JSON.parse」は JSON 文字列を配列に変換するために使用されます。ソース:マイクロソフト. したがって、これらの回答のどちらも、それ自体で問題を解決することはできませんでした。

答え:

JSON オブジェクトの値は文字列に変換する必要があります。'for' ループの反復ごとに新しい localStorage 項目を一意にするために、カウンターを含める必要があります。

r=0;

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

    //must have a counter added to each localStorage item to make it unique.                                   
    r+=1;

    //transforming the JSON id_str into a JavaScript object.
    tweetID = jQuery.parseJSON(tweets[i][0].id_str);

    //tweetID is now an integer value

    //converting it to a string ready for localStorage.
    tweetIdString = tweetID.toString();

    if(tweetIdString != localStorage['tweet_id' + r]){ 

      alert("new tweet");
      localStorage['tweet_id' + r] = tweetIdString;  
      console.log(localStorage['tweet_id' + r]);
   }
}

ちょっと、プレスト!

于 2013-03-23T15:40:23.940 に答える