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

제 문제는 항상 값이 localStorage 값과 같지 않음을 나타내는 if 문 내부에 들어가는 것입니다. 이 코드를 처음 실행하면 'tweet_id'localStorage 항목이 정의되지 않았기 때문에 항상 if 문으로 이동합니다. 일단 내부에 도착하면 내 코드에서 볼 수 있듯이 'tweetID'값을 localStorage 값에 써야합니다. 페이지가 30 초마다 새로 고침되고 새 짹짹이없는 경우이 값은 일치해야하며 if 문 안에 들어 가지 않습니다.

그렇지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

가 tweetID 값이 변경되지 않는 한 다시 거기에 도착해서는 안, 그것은 if 문에 도착 처음으로 후 이러한 값이 일치를 CONSOLE.LOG 사용에서. 어떤 아이디어라도 대단히 감사하겠습니다!

답변

0

데이터가 루프 '에 대한'는 단일 로컬 스토리지 항목의 값을 각각 트위드 ID 덮어되고 루프가 종료 될 때까지로되어있다. 즉, localStorage 항목의 최종 값은 항상 for 루프의 마지막 짹짹 ID가됩니다. 이 때문에 항상 두 값이 일치하므로 'if'문 안에 항상 들어갑니다. 그것이 로컬 스토리지 항목을 비교하기 전에 @의 hodaya의 대답에

덕분에, JSON 객체의 값은 문자열로 변환해야합니다. 이것은 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!

1

시도 :

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

또는 : 당신은 JSON으로 객체를 비교하는

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

, 그것은 동일하지 않습니다.

+0

좋아, 나는 그것을 줄 것이며, 내가 어떻게 일어나는지 알려주지! – Tom

+0

두 번째 방법은 JSON 출력을 문자열로 올바르게 변환했지만 첫 번째 호출 후에도 if 문 내부로 전달됩니다. if 문에서 변경해야 할 수도있는'localstorage [ 'tweet_text'] = tweeting;'행과 관련이 있습니까? – Tom

+0

@ 톰, chorme을 사용하고 있습니까? 디버깅으로 그 행을 수행 한 직후에'localStorage [ 'tweet_text']'의 값을 보도록 할 수 있습니다. ('tweeting'도 체크하십시오. 아마 비어 있습니다.) –

관련 문제