我有这个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的值发生变化,否则它不应再次进入。任何想法将不胜感激!
答案 0 :(得分:1)
尝试:
if(tweeting !=JSON.parse(localStorage['tweet_text']))
或者:
if(JSON.stringify(tweeting) != localStorage['tweet_text'])
您正在将对象与JSON进行比较,它将永远不会相同。
答案 1 :(得分:0)
当数据处于'for'循环时,每个花呢ID都会覆盖SINGLE本地存储项的值,直到循环结束。这意味着localStorage项的最终值将始终是for循环中的最后一个tweet 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]);
}
}
嘿,presto!