检查localStorage中是否存在变量的值

check if a value of a variable exists in localStorage

本文关键字:变量 存在 是否 localStorage 检查      更新时间:2023-09-26

我有这个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秒刷新一次,如果没有新的tweet,这些值应该匹配,而不是进入if语句。

事实并非如此。我做错了什么?

通过使用console.log这些值在它第一次进入if语句后匹配,所以它不应该再次进入那里,除非tweetID的值改变。任何想法将非常感激!

尝试:

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

或:

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

当你将一个对象与JSON进行比较时,它将永远不会相同。

由于数据处于'for'循环中,单个本地存储项的值将被每个tweed ID覆盖,直到循环结束。这意味着localStorage项的最终值将始终是for循环中的最后一个tweet 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]);
   }
}

嘿,很快!