Tengo la siguiente matriz:
arr = [ { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' }, { id: '2', name: 'Another', code: '55', number: '004', house: 'ES' }, { id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' }, ]; Estoy usando la función a continuación ( fuente ) para una barra de búsqueda para buscar todos los campos de una matriz de objetos ( arr ) depende de las entradas del usuario ( value ):
function findInValues(arr, value) { value = String(value).toLowerCase(); return arr.filter(o => Object.entries(o).some(entry => String(entry[1]).toLowerCase().includes(value) ) ); } Pero para resolver mi caso, la función solo puede buscar en el name de las claves y la house , la búsqueda debe ignorar la id , code y number .
Por ejemplo:
value = 55 Result = [ { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' } ];¿Qué debo hacer en mi caso?
Puede desestructurar las claves id , code y number que desea ignorar del objeto que está filtrando y luego agarrar el objeto restante sin estas propiedades usando la sintaxis rest ...o . Luego puede usar el mismo código que está usando actualmente para buscar el objeto o . Tenga en cuenta que a continuación, también he cambiado Object.entries() para que sea solo Object.values() ya que su código no usa la clave de la matriz de entrada:
const arr = [ { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' }, { id: '2', name: 'Another', code: '55', number: '004', house: 'ES' }, { id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' }, ]; function findInValues(arr, value) { value = String(value).toLowerCase(); return arr.filter(({id, code, number, ...o}) => Object.values(o).some(val => String(val).toLowerCase().includes(value) ) ); } console.log(findInValues(arr, 55)); De lo contrario, si conoce las claves que desea buscar (es decir, name y house ), puede verificarlas explícitamente:
const arr = [ { id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' }, { id: '2', name: 'Another', code: '55', number: '004', house: 'ES' }, { id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' }, ]; function findInValues(arr, value) { value = String(value).toLowerCase(); const search = ['name', 'house']; return arr.filter(o => search.some(key => o[key].toLowerCase().includes(value))); } console.log(findInValues(arr, 55));¡Versión más corta! :)
function findInValues(arr, value) { value = String(value).toLowerCase(); return arr.filter(({ name, house }) => (name.toLowerCase() == value || house.toLowerCase() == value) ); }