Pasé mucho tiempo buscando cómo obtener valores aleatorios de objetos y matrices, pero parece que no puedo discernir cómo lograrlo. Tengo este código, que albergará hasta cien reseñas diferentes con las credenciales correspondientes. ¿Cómo puedo a) Extraer un conjunto aleatorio de cuatro reseñas con todos los datos correspondientes cada vez que se actualice la página (debe ser única) b) Publicar esas reseñas en HTML/CSS a través de DOM
Aquí está el código base:
var reviews = [ { content: "content of review", // no need to have html there even. by: "name of reviewer or initials", stars: 5, // default, no need to specify to every item source: "Google Play", // default, no need to specify to every item }, { content: "content of review", // no need to have html there even. by: "name of reviewer or initials", stars: 5, // default, no need to specify to every item source: "Google Play", // default, no need to specify to every item }, etc.etc ];Lo primero que me viene a la mente es tener una función que devuelve una matriz de n elementos únicos (en su caso, n = 4)
const randomElementsFromArray = (amountOfElements, array) => { const arrayWithSelectedElements = []; while (arrayWithSelectedElements.length !== amountOfElements) { const randomIndex = Math.floor(Math.random() * array.length); const chosenElement = array[randomIndex]; if (!arrayWithSelectedElements.includes(chosenElement)) { arrayWithSelectedElements.push(chosenElement); } } return arrayWithSelectedElements; };Toma la cantidad de elementos que desea elegir y la matriz de la que desea elegir.
Un inconveniente sería el hecho de que la cantidad de veces que se ejecuta el ciclo no es consistente, pero debería funcionar.
EDITAR: Dispara, olvidé que hay una segunda parte de la pregunta.
Si no está utilizando ningún marco JS como React, y desea hacerlo en JS puro, crearía otra función que recorra los elementos de la matriz devuelta por randomElementsFromArray (o use el método .map en la matriz devuelta) y crea elementos, su contenido, y los agrega al DOM.