【问题标题】:check if a value of a variable exists in localStorage检查 localStorage 中是否存在变量的值
【发布时间】:2013-03-05 21:03:51
【问题描述】:

我有这个 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 的值发生变化,否则它不应再次进入那里。任何想法将不胜感激!

【问题讨论】:

    标签: javascript json html local-storage


    【解决方案1】:

    试试:

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

    或者:

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

    您正在将一个对象与 JSON 进行比较,它永远不会相同。

    【讨论】:

    • 好的,我试试看,让你知道我的进展如何!
    • 第二种方法正确地将 JSON 输出转换为字符串,但是在第一次调用后它仍然进入 if 语句。是否与 if 语句中的 localStorage['tweet_text'] = tweeting; 行也可能需要更改有关?
    • @Tom,你在使用 chorme 吗?你可以在调试完那行后立即尝试查看localStorage['tweet_text']的值。(还要检查tweeting,也许它是空的?)
    • 你也可以像这样检查行后的变量是什么:alert(tweeting); localStorage['tweet_text'] = tweeting; alert(localStorage['tweet_text']);
    【解决方案2】:

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

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

    答案:

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

    嘿,快!

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2017-02-13
      • 2011-12-19
      • 2020-09-30
      • 1970-01-01
      相关资源
      最近更新 更多