Tengo un botón que estoy deshabilitando al leer una matriz y verificar sus propiedades.
Mi matriz se ve así:
const arr = [ {id: '1', name: 'SOME_THING', status: 'AGREED'}, {id: '2', name: 'THIS_THING', status: 'AGREED'}, {id: '3', name: 'OTHER_THING', status: 'AGREED'}, {id: '4', name: 'EVERY_THING', status: 'AGREED'}, ];Mi lógica actual para deshabilitar/habilitar este botón se ve así:
arr.filter((item) => item.indexOf('THING') > -1) .every((item) => item.status === 'AGREED')Ahora mis requisitos han cambiado. Quiero habilitar/deshabilitar el botón de la misma manera, pero quiero EXCLUIR elementos específicos de esta matriz. Por ejemplo, quiero excluir estos dos elementos:
{id: '2', name: 'THIS_THING', status: 'AGREED'}, {id: '3', name: 'OTHER_THING', status: 'AGREED'},Usando mi lógica, ¿cómo filtro mi matriz mientras EXCLUYO estos dos?
Me doy cuenta de que puedo intentar eliminar estos elementos específicos, pero me preguntaba si había una forma potencialmente más limpia de hacerlo sin una eliminación explícita.
Puede excluir una lista de elementos asumiendo siempre que el par clave/valor dado es verdadero, independientemente del valor.
const exclusionList = ['THIS_THING', 'OTHER_THING']; arr.filter((item) => item.indexOf('THING') > -1) .every((item) => item.status === 'AGREED' || exclusionList.includes(item.name))También agregue su nombre clave (nombre) donde usa indexOf
let arr = [ {id: '1', name: 'SOME_THING', status: 'AGREED'}, {id: '2', name: 'THIS_THING', status: 'AGREED'}, {id: '3', name: 'OTHER_THING', status: 'AGREED'}, {id: '4', name: 'EVERY_THING', status: 'AGREED'}, ]; const list = ['THIS_THING', 'OTHER_THING']; console.log(arr.filter((item) => item.name.indexOf('THING') > -1).every((user) => user.status === 'AGREED' || list.some(user.name)))