Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

163
Vistas
La mejor manera de buscar TODOS los términos en una matriz de objetos

Estoy tratando de filtrar objetos en función de si TODOS los términos de búsqueda dados existen en ALGUNOS de los valores de propiedad de CADA objeto en la matriz. Pero tampoco quiero buscar dentro de la propiedad deviceId .

Pero, ¿hay alguna manera de hacerlo con menos código?

Así que hago lo siguiente:

  1. Convierta los objetos en matrices iterables
  2. Filtre la matriz para eliminar matrices con deviceId
  3. Convierta las matrices nuevamente en los objetos de par Clave/Valor
 let DeviceDtoArrayOfArray = []; DeviceDtos.forEach((indiv) => { DeviceDtoArrayOfArray.push(Object.entries(indiv)); }); let DeviceDtoArrayOfArrayFiltered = []; DeviceDtoArrayOfArray.forEach((indiv) => DeviceDtoArrayOfArrayFiltered.push( indiv.filter((indiv) => indiv[0] !== "deviceId") ) ); let DeviceDtoArrayOfArrayFilteredObjects = []; DeviceDtoArrayOfArrayFiltered.forEach((indiv) => { DeviceDtoArrayOfArrayFilteredObjects.push(Object.fromEntries(indiv)); });
  1. Definir matriz de términos de búsqueda de muestra
  2. Para cada objeto del Paso 3, cree una matriz de sus valores de propiedad
  3. Filtre cada Objeto en la matriz buscando cada Término de búsqueda, verifique si existe dentro de algunos de los valores de propiedad del Paso 5, si existe, entonces el objeto se devuelve a una nueva matriz, si no, se filtra.

Matriz de muestra que contiene los objetos con deviceId

 const DeviceDtos = [ { deviceId: 1, deviceName: "Device0000", hwModelName: "Unassigned", deviceTypeName: "Unassigned", serviceTag: "A1A" },...

Ejemplos de términos de búsqueda

 const searchTerms = ["HwModel", "A1A"];

Filtrar objetos según los términos de búsqueda

 const results = DeviceDtoArrayOfArrayFilteredObjects.filter((indiv) => { const propertiesValues = Object.values(indiv); // all property values return searchTerms.every((term) => propertiesValues.some( (property) => property.toLowerCase().indexOf(term.toLowerCase()) > -1 ) ); }); console.log(results);
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Asigne la matriz de dispositivos a una nueva matriz, donde un elemento es el dispositivo y el otro es una matriz de cadenas compuestas a partir de claves y valores (con el deviceId de dispositivo excluido con la sintaxis de reposo).

Luego, todo lo que tiene que hacer es filtrar esa matriz según si .every uno de los términos de búsqueda está incluido en .some de esas cadenas.

 const DeviceDtos = [ { deviceId: 1, deviceName: "Device0000", hwModelName: "Unassigned", deviceTypeName: "Unassigned", serviceTag: "A1A" }, { notincluded: 'notincluded' } ]; const devicesAndStrings = DeviceDtos.map( ({ deviceId, ...obj }) => [obj, Object.entries(obj).flat()] ); const searchTerms = ["hwModel", "A1A"]; const foundDevices = devicesAndStrings .filter(([, strings]) => searchTerms.every( term => strings.some( string => string.includes(term) ) )) .map(([obj]) => obj); console.log(foundDevices);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda