Estoy tratando de crear una matriz de 12 productos únicos. Estos productos se seleccionan de una lista de productos que se recuperan de mi base de datos MONGODB. Puedo crear la matriz bastante bien, pero parece que no puedo hacer que la longitud de la matriz sea 12 cada vez. Necesito que la longitud mínima de la matriz sea 12 y la longitud máxima de la matriz también sea 12.
Este es mi código a continuación y cada vez que ejecuto este código, randomProducts.length suele tener una longitud aleatoria, en lugar de 12.
Products.find({}).limit(12).exec(function (err, randProducts) { var randomProducts = [] for (let i = 0; i < randProducts.length; i++) { var rand = Math.floor(Math.random() * (randProducts.length - 0) + 0); if (randomProducts.includes(randProducts[rand]) == false) { randomProducts.push(randProducts[rand]) } } console.log(randomProducts.length) })Está comenzando con un conjunto inicial de 12 productos debido a la .limit(12) de su consulta MongoDB.
La selección de 12 elementos aleatorios de un conjunto de 12 elementos también se denomina barajar o aleatorizar la matriz. La reproducción aleatoria de una matriz se ha explicado varias veces: ¿Cómo aleatorizar (reorganizar) una matriz de JavaScript?
Para elegir 12 elementos aleatorios de una matriz más grande, eche un vistazo aquí: ¿Cómo obtener una cantidad de elementos aleatorios de una matriz?
Su código tiene el problema de que está intentando 12 veces elegir un producto al azar. Pero si el producto ya está recogido (que será en muchos casos) no haces nada. Así que tendrías que tener mucha suerte para obtener los 12 productos en un orden aleatorio.