我想在列表之后显示来自用户的帖子列表。 我可以按默认顺序显示它,但我想按随机顺序显示它。 我使用的是称为shuffle的函数,该函数可以正常工作,但是在我的代码中无法正常工作,因为重复了很多帖子。 我的代码是这样的:
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();
我正在使用随机播放功能,但是它重复了帖子。你能帮我吗?如何以随机顺序显示此帖子?
答案 0 :(得分:0)
很难说,因为我无法运行它,并且您从未在发布的代码中实际调用shuffle
,但在我看来,您只需要在正确的位置调用shuffle。
在前一行
postdatakey.forEach(function(postdata){
添加
shuffle(postdatakey);
随机排列帖子的顺序。