2017-12-28 12 views
0

私はfirebaseデータベースを持っていて、それらのすべてのユーザに友人が格納されています(友人であれば値は真です)。しかし、他人が依頼をまだ受け付けていない場合は、値はfalseです。データをその値に従ってフィルタリングします

enter image description here

私は、リスト内のすべてのそれらのユーザーを置くことができます。しかし、私が達成したいのは、値が 'true'のユーザーのみが表示され、値が 'false'のユーザーは表示されないことです。

var ref = firebase.database().ref("friends").child(userUID); 
ref.on('value', gotFriends); 

function gotFriends(data) { 
    var usernames = data.val(); 
    var names = Object.keys(usernames); 

    for (var i = 0; i < names.length; i++) { 
     var uname = names[i]; 
     var ul = document.getElementById("friendsList"); 
     var li = document.createElement('li'); 
     li.appendChild(document.createTextNode(uname)); 
     ul.appendChild(li); 
    } 
} 

ありがとうございます!

このような何かが動作するはず
+0

'names.filter(name => usernames [name])'を追加するだけで'name'の対応するキーが 'true'の' names'配列に項目を保持することができます。 – Ohad

+0

@オハード答えをありがとう。正確にどこにこれを追加すべきですか? –

+0

'var names = Object.keys(...')は動作します。 – Ohad

答えて

0

function gotFriends(snapshot) { 
    snapshot.forEach(function(friend) { 
     var uname = friend.key; 
     if (friend.val() === true) { 
     var ul = document.getElementById("friendsList"); 
     var li = document.createElement('li'); 
     li.appendChild(document.createTextNode(uname)); 
     ul.appendChild(li); 
     } 
    } 
} 

ifに加えて、このコードは、結果をループにSnapshot.forEach()を使用しています。それは振る舞いを変えるものではありませんが、少し速く、より慣用的です。

+0

これは動作します。ありがとうございました! –

関連する問題