I want to show a list of the posts from a user following list. I can show it in the default order, but I want to show it in a shuffle order. I was using a function called shuffle, that works, but in my code doesn't work correctly, because repeat many posts. My code is this:
function feed(){
var postList = document.getElementById('postList');
var userId = "a";
let rangeNumbers=[];
var keys = firebase.database().ref('users/'+userId).child("following").once('value').then(function(datakey){
let usersPost = [];
let usersPostProfile = [];
var contador = 0;
let htmlPost = "";
var i = 0;
datakey.forEach(function(data){
let userDB = data.val();
let userIdFollowing = userDB.id;
firebase.database().ref('posts/').orderByChild("id").equalTo(userIdFollowing).once('value').then(function(postdatakey){
let cantidad = postdatakey.numChildren();
postdatakey.forEach(function(postdata){
//Detecta todos los datos de la publicacion
let postDB = postdata.val();
let postId = postDB.id;
firebase.database().ref('/users/' + postId).once('value').then(function(snapshot) {
let username = (snapshot.val() && snapshot.val().username);
let name = (snapshot.val() && snapshot.val().name);
let image = (snapshot.val() && snapshot.val().image);
// ...
let newArray = {
text: postDB.text,
image: postDB.image,
imageProfile: image,
username: username,
name: name,
timestamp: postDB.timestamp
};
usersPost.push(newArray);
htmlPost +=
'<div class="postItem">'
+'<br>'
+'<img class="post-img-profile" src="'+usersPost[i].imageProfile+'">'
+'<div class="userData">'
+'<a><b>'+usersPost[i].name+'</b></a><br>'
+'<a>'+usersPost[i].username+'</a>'
+'</div>'
+'<br><br><Br><br>'
+'<div class="post">'
+'<p>'+usersPost[i].text+'</p>'
+'<div class="center-content">'
+'<img class="imagePostBig" src="'+usersPost[i].image+'">'
+'</div>'
+'</div>'
+'<div class="optionPost">'
+'<img class="post-icon" src="https://img.icons8.com/ios/50/000000/like.png">'
+'<img class="post-icon" src="https://img.icons8.com/ios/50/000000/comments.png">'
+'<div class="line"></div>'
+'</div>'
+'</div>';
//console.log(htmlPost);
postList.innerHTML = htmlPost;
i++
});
});
});
});
});
}
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
feed();
I was using the shuffle function but it repeat the posts. Can you help me please? How can I show this post in a shuffle order?