2016-08-27 6 views
-1

私はFirebaseを使用していますので、ログに記録されていないカードだけを照会できるようにするには、ユーザーでは、私はそのルートに行くことにもオープンしています。今私は事実の後にフィルタリングをしようとしています。私は、ユーザーが既に見てきたすべてのカードに関する情報を保持している二番目の配列を持っている他の配列に値が存在する場合はJavaScriptをオブジェクトから削除します

enter image description here

私はすべてのカードの配列を持っているが、このように見えるというのが私のアプリケーションに含まれています。あなたが1つの配列を使用していけないのはなぜ私が両方の配列に目を通すことができるようにしたい、とアレイ2試合アレイ1内の$ IDでCID場合は、アレイ1

enter image description here

+0

を削除するために、スプライスを使用しています。あなたが受け入れたものと同じでした。 –

答えて

2

ループとあなたが私の答えに続くことができる要素

for(var i =0; i< array2.length; i++) { 
    for(var j= 0; j< array1.length;j++) { 
    if (array2[i].$id === array1[j].$id) { 
     array1.splice(j,1); 
     break; 
    } 
    } 
0

から完全にそのオブジェクトを削除しますそのためのオブジェクトの。 偽見ておくデフォルトでは見られるもの

のオブジェクトキーを保持します。表示された列がfalseの場合はfirebase-queryを使用します。

または、コード内のデータを取得した後にそのようなことを行うことができます。

var resultarray = []; 

for(var i =0; i< array1.length; i++) { 
    var flag = true; 
    for(var j= 0; j< array2.length;j++) { 
    if (array1[1].$id === array2[2].$id) { 
     flag = false; 
     break; 
    } 
    } 
    if(flag === true) { 
    resultarray.push(array1[i]); 
    } 
} 
1

これは、機能的な方法で行うには、実際には非常に簡単です:

array1 = array1.filter(item => array2.every(item2 => item2.cid != item.$id));

Array.prototype.filter()戻り、配列として、供給機能を引き起こす配列の要素がtrueを返すように。そして、私たちのフィルタ評価者は、 'CIDがこのアイテムのIDと一致する配列2内にアイテムがなければtrueを返す'と言っています。

filter()が新しい配列を返すため、splice()を使用する必要はありません。新たにフィルタリングされた配列にarray1を再割り当てすることができます。アレイを通じ

関連する問題