2013-03-17 489 views
3

我有这个if语句,如果变量值不等于localStorage值,则执行代码。检查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的值发生更改,否则不应再次进入。任何想法将不胜感激!

回答

0

由于数据位于'for'循环中,因此每个Tweed ID将覆盖SINGLE本地存储项的值,直到循环结束。这意味着localStorage项目的最终值将始终是for循环中的最后一个推文ID。因为这两个值永远不会匹配,导致它总是进入'if'语句。

感谢@ hodaya的回答,JSON对象的值必须在与localStorage项目进行比较之前转换为字符串。这是因为localStorage只将值存储为字符串。从@ hodaya的答案中给出的例子; 'JSON.stringify'用于将数组转换为JSON字符串,'JSON.parse'用于将JSON字符串转换回数组。消息来源:Microsoft。所以这些答案都不能自己解决问题。

解答:

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

嘿,快死了!

1

尝试:

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

或者:

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

您正在使用JSON比较的对象,它永远不会是相同的。

+0

好吧,我会给它一个去,让你知道我怎么下去! – Tom 2013-03-17 13:55:18

+0

第二种方法正确地将JSON输出转换为字符串,但是在第一次调用之后它仍然进入if语句的内部。这与if语句中的'localStorage ['tweet_text'] = tweeting'行有什么关系,可能需要更改? – Tom 2013-03-17 14:16:11

+0

@Tom,你在使用chorme吗?您可以尝试通过调试后立即查看'localStorage ['tweet_text']'的值是什么(也检查'tweeting',也许它是空的?) – 2013-03-18 06:05:52

相关问题