desarrolladores Estoy tratando de hacer una tabla que muestre los máximos goleadores. Soy nuevo en firebase v9.
problema: estoy usando una base de datos en tiempo real para almacenar el nombre y las puntuaciones de los usuarios con nombres de documentos y los mismos nombres. ya que usé orderbyValue, orderbykey y orderbyChild. snapshot.val() devuelve un objeto que contiene objetos (marque en la parte inferior) que está desordenado y no sabe cómo acceder a todos o hacer un bucle. para limitar, probé limitToLast, que funciona bien pero la clasificación no.
ayúdame a ordenar y limitar esto.
así es como mis datos se almacenan en la base de datos en tiempo real
este es mi código para buscar y tratar de ordenar
import { getDatabase, ref, set, onValue, query, orderByChild, limitToLast, equalTo, orderByValue, orderByKey } from "https://www.gstatic.com/firebasejs/9.4.1/firebase-database.js"; var namelist = $('.person'); var list = $('.scores'); // const scoreBoardRef = ref(db, 'users'); const scoreBoardRef = query(ref(db, 'users'), orderByChild('score')); onValue(scoreBoardRef, (snapshot) => { const data = snapshot.val(); console.log(data); // this returns object containing object and **i don't know how to deal with this.** //console.log(scoreBoardRef); list[0].textContent = data.score; // here i want score namelist[0].textContent = "";//here i want name //my main goal is to loop through top 3 or 10 data and print it to table });En la consola, esto es lo que obtengo
⬇{abcd: {…}, man2: {…}, nacho: {…}, two: {…}} ▶abcd: {name: 'abcd', score: 15} ▶man2: {name: 'man2', score: 20} ▶nacho: {name: 'nacho', score: 21} ▶two: {name: 'two', score: 18} ▶[[Prototype]]: ObjectComo comentó Dharmaraj: los resultados en la instantánea en realidad están ordenados, pero cuando llamas a snapshot.val() , se convierte en un objeto JSON y las claves en un objeto JSON, por definición, no están ordenadas.
Para obtener los resultados en orden, recórralos con snapshot.forEach :
onValue(scoreBoardRef, (snapshot) => { snapshot.forEach((child) => { const data = child.val(); console.log(data); });