¿Cómo verificar si un elemento está presente en una matriz o no en JavaScript sin usar el bucle for o cualquier método de matriz como map, reduce? let numList= [1,2,3,6,9,2,-8,20]; Quiero verificar 9 y 30, si existe o no sin usar el bucle for o cualquier método de matriz

3
zzed pathan 9 sep. 2018 a las 08:32

3 respuestas

La mejor respuesta

Supongo que una opción sería convertir la matriz a Set y marcar Set.has:

let numList= [1,2,3,6,9,2,-8,20];
const set = new Set(numList);
console.log(set.has(9));
console.log(set.has(30));

Verificar si un Set tiene un elemento tiene una complejidad de O(1), que es una complejidad menor que cualquiera de los métodos de matriz o for bucles, que son O(N) o {{X4} }, por lo tanto, cuando tiene una matriz muy grande y desea verificar si tiene ciertos elementos, puede ser una buena idea convertirlo a Set primero.

7
CertainPerformance 9 sep. 2018 a las 05:34

Puede convertir la matriz a cadena usando JSON.stringify y usar La cadena incluye para verificar si la cadena contiene el valor buscado específico

let numList = [1, 2, 3, 6, 9, 2, -8, 20];
let m = JSON.stringify(numList)
console.log(m.includes(-8))
1
brk 9 sep. 2018 a las 06:01

Si puede usar un ciclo while, puede implementar una búsqueda binaria. Como se trataba de una pregunta de entrevista, no me sorprendería si esto es lo que estaban buscando.

Aquí está el algoritmo tradicional en psuedocode, tomado de Rosetta Code

BinarySearch(A[0..N-1], value) {
  low = 0
  high = N - 1
  while (low <= high) {
      // invariants: value > A[i] for all i < low
                     value < A[i] for all i > high
      mid = (low + high) / 2
      if (A[mid] > value)
          high = mid - 1
      else if (A[mid] < value)
          low = mid + 1
      else
          return mid
  }
  return not_found // value would be inserted at index "low"
}
1
Connor C 9 sep. 2018 a las 06:42