var randomArray = [ 'a','b', 'c' ]; const randomize = () => { let tempArray = randomArray; let randomIndex = Math.floor(Math.random()*randomArray.length); let randomItem = randomArray[randomIndex]; // remove item randomArray.splice(randomIndex, 1); // return item return randomItem; } for (let i = 0; i < randomArray.length; i++) { console.log(randomize()) }Estoy tratando de devolver elementos en función de la longitud de la matriz (3), pero por alguna razón solo devuelvo (2).
A medida que se reduce el tamaño de la matriz , no debe incrementar i . Como tanto su length como i nos movemos con un paso, estás terminando el bucle demasiado pronto. Solo quieres comprobar la length :
var randomArray = [ 'a','b', 'c' ]; const randomize = () => { let randomIndex = Math.floor(Math.random()*randomArray.length); let randomItem = randomArray[randomIndex]; // remove item randomArray.splice(randomIndex, 1); // return item return randomItem; } while (randomArray.length) { console.log(randomize()) } No es su pregunta, pero tenga en cuenta que el splice devuelve el segmento que se "empalmó" fuera de la matriz, por lo que puede usarlo en lugar de asignar el valor a una variable:
var randomArray = [ 'a','b', 'c' ]; const randomize = () => { let randomIndex = Math.floor(Math.random()*randomArray.length); // remove & return the item return randomArray.splice(randomIndex, 1)[0]; } while (randomArray.length) { console.log(randomize()) }Necesita un bucle diferente y verifica solo la longitud de la matriz.
var randomArray = ['a','b', 'c']; const randomize = () => { const randomIndex = Math.floor(Math.random() * randomArray.length); return randomArray.splice(randomIndex, 1)[0]; } while (randomArray.length) { console.log(randomize()) }Está eliminando el elemento de la lista cuando llama a randomize() , por lo tanto, su código solo se ejecuta dos veces. En su lugar, podría usar una copia de la matriz en su función randomize() . Podemos hacer esto con el método .slice() . Esto nos permitirá preservar los valores de randomArray :
var randomArray = [ 'a','b', 'c' ]; let tempArray = randomArray.slice(); const randomize = () => { let randomIndex = Math.floor(Math.random()*tempArray.length); let randomItem = tempArray[randomIndex]; // remove item tempArray.splice(randomIndex, 1); // return item return randomItem; } for (let i = 0; i < randomArray.length; i++) { console.log(randomize()); }