2017-11-24 5 views
0

これは私の最初の質問です。私はローカルストレージ内の配列にオブジェクトを追加しようとしているコードがあります。既に存在する場合は、チェックしてループを停止します。ただし、ループが空のときに作成される最初の要素でのみ発生します。私のコードを見て、私が間違っていることを見てください。オブジェクトの配列をループしても文が返されないif文

  • ループ
  • 一部
  • forEachの機能では、引数が他の関数から変数を取得するためにある

のために、私はいくつかのデータをフェッチするためにAJAXを使用しています:私は試してみました。私はforEachがreturn文を受け入れないことを知っています。そのため、コードはコメントアウトされています。事前 コードで

ありがとう:あなたは一致が見つかっており、ループはを停止したいとき

var counter = 0; 

function bookmarkNewsSource(that, x, data, newsName) { 

    myBookmark = { 
     count: counter, 
     imgNum: x, 
     id: data.sources[x].id, 
     name: data.sources[x].name 
    }; 

    // check if fullTask already exists 
    if (localStorage.getItem("bookmarks") === null) { 
     //if not init array  
     var bookmarks = [];  
     //add to an array 
     bookmarks.push(myBookmark); 
     counter++; 
     //set localstorage and convert object to a string 
     localStorage.setItem("bookmarks", JSON.stringify(bookmarks)); 
    } else { 
     var bookmarks = JSON.parse(localStorage.getItem("bookmarks"));  
     // bookmarks.forEach((bookmark, index, array) => { 
     //  console.log(bookmark, index); 
     //  if (newsName == bookmark.name) { 
     //   return 'done'; 
     //  } else { 
     //   bookmarks.push(myBookmark); 
     //   localStorage.setItem("bookmarks", JSON.stringify(bookmarks)); 
     //   counter++;  
     //  } 
     // }); 

     bookmarks.some((bookmark) => { 
      if (newsName == bookmark.name) { 
       console.log('yes', newsName); 
       return false; 
      } else { 
       JSON.parse(localStorage.getItem("bookmarks")); 
       bookmarks.push(myBookmark); 
       localStorage.setItem("bookmarks", JSON.stringify(bookmarks)); 
       counter++;  
      } 
     }); 
    } 
} 

答えて

0

あなたはそれがほとんど右の持っていたが、ちょうどtrueを返却する必要があります。

some()それはコールバックがtruthy値を返すものを見つけるまで、アレイ内 存在する各要素に対して一度コールバック関数を実行する - それはMDN Array.prototype.some()で説明良いでしょう。そのような要素が見つかった場合 、some()はすぐに私は変わったが、それはまだ動作しない、真

var bookmarks = JSON.parse(localStorage.getItem("bookmarks")); 
    var isPresent = bookmarks.some((bookmark) => { 
     if (newsName == bookmark.name) { 
      console.log('Match Found', newsName); 
      return true; //Exit loop and stop going through further elements. 
     } 
    }); 

    if (!isPresent) { 
      bookmarks.push(myBookmark); 
      localStorage.setItem("bookmarks", JSON.stringify(bookmarks)); 
      counter++;  
    } 
+0

は、あなたの答えをありがとう返します。これは、配列内の最初の要素(オブジェクト)に対してのみ正しく実行されます。それは一度しか追加しません。しかし、私が追加しようとすると、それらの多くは失敗し、それを続けます。私はまた、インデックスをチェックし、正しくiteratesとifステートメントからコードをログに記録しますが、それでもelseステートメントに続きます。 Sthは間違っているはずです。 – AndrewB

+0

ああ、あなたのコードをよく見てみると、問題は 'some()'の中の 'else'によると思われますが、私はこれも含めて更新しました。 – Ankit

+0

優秀、それは働いた!私はさまざまな方法で試しましたが、私は正しい答えから遠く離れていないと思います。正しい場所にコードを配置するだけの問題:Dありがとう! – AndrewB

関連する問題