Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

164
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!