Estoy tratando de cambiar el número X en el ciclo for según la matriz que usa esta función. La función obtiene x valores aleatorios de una matriz que luego verifica si no es el mismo valor y si no es el mismo valor, luego devuelve los 2 valores aleatorios en la matriz. Intenté hacer una declaración de cambio como esta:
switch(this) { case array1: x = 2; break; case array2: x = 3; break; }código
Array.prototype.random = function () { let result = []; let bool = false; let x = 0; for (var i = 0; i < x; i++) { result.push(this[Math.floor(Math.random() * this.length)]); } while (bool == false) { if (result[0] === result[1]) { result.pop(); result.push(this[Math.floor(Math.random() * this.length)]); } else { bool = true; } } return result[0] + " + " + result[1]; }Obtener la cantidad de elementos únicos en la matriz se parece a
function getUniqueCount(list){ let storage={}, count=0; for(let i=0; i<list.length; i++){ if(!storage[list[i]]){ storage[list[i]]=true; count++; } } return count; }Pero no estoy seguro de si ese número te ayudaría porque no estás diciendo lo que quieres que haga tu función.
No estoy seguro de cuál se supone que es la variable x . Si solo desea devolver 2 elementos aleatorios de la matriz, no es necesaria esa variable o la matriz de result . Solo usa dos variables.
Array.prototype.random = function() { let item1 = this[Math.floor(Math.random() * this.length)]; while (true) { let item2 = this[Math.floor(Math.random() * this.length)]; if (item2 != item1) { return item1 + " + " + item2; } } } console.log([1, 2, 3, 4, 5, 6, 7, 8].random());Elimine "()this" porque se trata de un error de sintaxis.
Estás tratando de hacer un cálculo matemático:
Math.random() * this.lengthNo es un error de sintaxis:
Math.random()this.length Y también, tu for loop no está haciendo nada, porque i cuenta hasta x solo si i es menor que x . Pero i y x son ambos 0, por lo que no hará nada. Si está tratando de hacer que el ciclo for suba 1 vez, simplemente use "2", para obtener 2 resultados en lugar de "0".
A continuación, result.pop() simplemente devuelve el valor de "resultado".
Quita eso.