2017-03-18 15 views
0

ユーザーが現在見ているゲームのIDを取得するお気に入りリストを実装しようとしています。私が最初にリストに追加された、それが正常に動作し、同じお気に入りを追加してみた場合、それが動作する新しいお気に入りを追加しようとした場合ローカルストレージを使用してお気に入りリストを作成する

$('#favouriteBtn').click(function(){ 
    currentAddFav(); 
}); 

function currentAddFav(){ 
    if(localStorage.getItem('favourites')){//If there are favourites 
     var storage = JSON.parse(localStorage['favourites']); 
     for (var i = 0;i <= storage.length;i++){ 
      if(storage[i] == currentGame.id){//Id already stored, we dont want a duplicate id so ignore 
       console.log('id already stored'); 
       break; 
      } 
      else{//game id doesn't exist in storage so add the id to storage 
       storage.push(currentGame.id); 
       localStorage.setItem('favourites', JSON.stringify(storage)); 
       console.log('must be a new id?'); 
      } 
     } 
    }else{//No favourites in local storage, so add new 
     var favArray= []; 
     favArray.push(currentGame.id); 
     localStorage.setItem("favourites", JSON.stringify(favArray)); 
     console.log('New favourites list'); 
    } 

} 

:これまでのところ私はこれを持っています。次に、最初に追加したものとは異なるお気に入りを追加しようとすると、ローカル記憶域の配列によって新しいIDを追加することができます。

+0

何が問題なのですか? – niklas

+0

@niklas基本的には、ユーザーがお気に入りに一度しか配列を追加できないようにしたい、重複idsを避けたい、現在重複idsを取得している、ループの下のif文とelse文が毎回起動するクリックすると、それはちょうどどちらか一方になるはずです。 – Rick

答えて

1

あなたのループが

for (var i = 0;i <= storage.length;i++){ 

は、ストレージ内のすべての項目のための場合や、他のケースのいずれかを実行間違っています。あなたが望むものは:

if (storage.indexOf(currentGame.id) == -1) { 
    # not found 
    storage.push(currentGame.id); 
    localStorage.setItem('favourites', JSON.stringify(storage)); 
} else { 
    # found 
    console.log('item already in favorites') 
} 
+0

これは私の問題を解決したようです、ありがとう!基本的に、idが配列内になければ、それを追加しますか? – Rick

+0

はい。あなたのループをもう一度見て、あなたがいるときに何が起こるかを考えてください。あなたの配列の '[2,3,4]'と 'currentGame.id = 4'の項目をif ... else ...を3回実行すると、else caseを2回ヒットします(項目2と項目3 )、if caseを1回実行します(項目4)。だから、4はあなたの配列に2回以上追加されます(それ以外の場合) – niklas

+0

私は自分のループを持っていたので、ターゲットに到達するまで反復されたすべての数値に対してアクションを実行します。 – Rick

関連する問題