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?
It's hard to tell since I can't run it and you never actually call shuffle
in the code you posted but it looks to me like you just need to call shuffle in the right place.
On the line before
postdatakey.forEach(function(postdata){
add
shuffle(postdatakey);
to randomize the order of the posts.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.