3

我有这个 if 语句,如果变量值不等于 localStorage 值,则执行代码。

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']);
   }
}

我的问题是它总是进入 if 语句,表明该值永远不等于 localStorage 值。此代码第一次运行时,它总是会进入 if 语句,因为“tweet_id”localStorage 项未定义。一旦它进入它应该将“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 对象的值必须转换为字符串。必须包含一个计数器,以使新的 localStorage 项对于“for”循环中的每次迭代都是唯一的。

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 回答