我有下一个代码...
function feed() {
var userId = "a";
var keys = firebase.database().ref('users/' + userId).child("following").once('value').then(function(datakey) {
let usersPost = {};
let contador = 0;
let rangeNumbers = [20, 15, 5];
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) {
postdatakey.forEach(function(postdata) {
//Detecta todos los datos de la publicacion
let postDB = postdata.val();
let postId = postDB.id;
usersPost[contador] = postDB;
rangeNumbers.push(contador);
contador++;
});
});
});
//console.log(usersPost);
//Randomize here
var randomi = rangeNumbers;
randomi = shuffle(randomi);
console.log(randomi);
});
}
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;
}
此代码将1,2,3添加到我的数组中。 我的新数组是rangeNumbers = [20,15,5,1,2,3]; 但是当我想将其随机化时,我的输出是:
15、20、5、1、2、3。 我当时以为这是随机播放功能中的问题,但这不是问题。
在控制台中,我看到: Array(3)[5,20,15]
但是当我打开时,我可以看到输出15、20、5、1、2、3。 该函数仅适用于创建的原始数组。
请帮助我,我想对我所有的数组进行随机化,而我的代码只能对前三个数字(原始数组)进行随机化。
答案 0 :(得分:0)
Firebase代码异步运行,并且您在回调函数运行之前对数组进行了改组。您需要将该代码移到回调函数中。
function feed() {
var userId = "a";
var keys = firebase.database().ref('users/' + userId).child("following").once('value').then(function(datakey) {
let usersPost = {};
let contador = 0;
let rangeNumbers = [20, 15, 5];
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) {
postdatakey.forEach(function(postdata) {
//Detecta todos los datos de la publicacion
let postDB = postdata.val();
let postId = postDB.id;
usersPost[contador] = postDB;
rangeNumbers.push(contador);
contador++;
});
//Randomize here
var randomi = rangeNumbers;
randomi = shuffle(randomi);
console.log(randomi);
});
});
});
}