Tengo dos matrices y quiero obtener un nuevo valor aleatorio de Array1, si el valor no está incluido en Array2 ya.
const array1 = ["Banana", "Orange", "Apple", "Mango"]; const array2 = ["Banana", "Mango"]; const randomElement = array1[Math.floor(Math.random() * array.length)];Ya tengo una variable existente llamada randomElement, que encuentra un elemento aleatorio en el Array 1 pero no analiza si el elemento ya existe en el Array 2 o no.
Idealmente, la variable randomElement solo debería generar actualmente "Orange" o "Apple", ya que son los que faltan en el Array 2. ¿Cómo puedo continuar con esta tarea de la manera más fácil?
Primero debe calcular la matriz que tiene elementos en la array1 pero no en array2 , puede hacerlo usando Array#filter y Array#includes :
const array1 = ["Banana", "Orange", "Apple", "Mango"]; const array2 = ["Banana", "Mango"]; const array = array1.filter(e => !array2.includes(e)); const randomElement = array[Math.floor(Math.random() * array.length)]; console.log(randomElement);Puede calcular el conjunto de diferencias (elementos que están en la matriz 1 pero no incluidos en la matriz 2) entre los dos conjuntos y usarlo para elegir el siguiente elemento:
const diff = array1.filter((v) => !array1.includes(v)); const randomElement = diff[Math.floor(Math.random() * array.length)]; console.log(randomElement);Su implementación actual solo muestra un valor aleatorio de la matriz. Una forma de arreglar esto es envolverlo dentro de un bucle. Continúe obteniendo el valor y no regrese hasta que encuentre un valor que no esté en la array2 . Eso podría continuar para siempre (en el peor de los casos).
En otro enfoque:
Necesitará una tercera matriz que será una versión filtrada de su array1 . Ejecute todas las operaciones en eso y debería estar bien.
const array1 = ["Banana", "Orange", "Apple", "Mango"]; const array2 = ["Banana", "Mango"]; const filteredArr = array1.filter(x => !array2.includes(x)); const randomElement = filteredArr[Math.floor(Math.random() * filteredArr.length)]; console.log(randomElement); Métodos utilizados: filter() - para filtrar elementos de matriz en función de una condición.
includes() - para verificar si existe un valor en una matriz