Necesito generar una matriz diferente cada vez en JS, donde su longitud debe ser de 16 elementos exactos, cada elemento debe estar entre 0 y 7, y cada elemento debe aparecer exactamente dos veces. por ej. [0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] o [0,1,2,3,4,5,6,7 ,7,6,5,4,3,2,1,0]
Necesito una función que genere una matriz diferente cada vez.
let sequence=[0,1,2,3,4,5,6,7] let seq1=[0,1,2,3,4,5,6,7] let seq2=[0,1,2,3,4,5,6,7] let arr1=[] let arr2=[] let arr3 function generateArray(arr,seq){ for(let i=0;i<8;i++){ let numb=Math.trunc(Math.random()*(seq.length)) arr.push(seq[numb]) seq.splice(numb,1) } } generateArray(arr1,seq1) generateArray(arr2,seq2) arr3=[...arr1,...arr2] console.log(arr3)He usado la función anterior, pero el inconveniente es que primero genera aleatoriamente todos los números del 0 al 7 y luego vuelve a hacer lo mismo.
Hay dos funciones:
xArray(num) Instancia una nueva matriz y la llena con números consecutivos hasta la longitud dada
shuffle(arr) Baraja cualquier tipo de Array usando el algoritmo de barajar de Fisher-Yates
const xArray = x => [...new Array(x)].map((_, i) => i); const shuffle = array => { let qty = array.length, temp, i; while (qty) { i = Math.floor(Math.random() * qty--); temp = array[qty]; array[qty] = array[i]; array[i] = temp; } return array; }; let a = shuffle(xArray(8)); let b = shuffle(xArray(8)); console.log([...a, ...b]);