Estoy tratando de verificar si un valor está presente en una matriz anidada. Así es como se ven los datos con los que estoy trabajando:
[ { name: 'bob', occupation: ['Teacher', 'Store Owner'], }, { name: 'grace', occupation: ['Doctor'], }, ]
Estoy tratando de ver si el valor de ocupación ya existe. Este es mi código actual:
const occupationExists = (value) => users.some((user) => user.occupation === value);
Entiendo que esto no funciona porque no está accediendo a los valores en la matriz, pero ¿cómo lo hago? Cualquier ayuda sería apreciada.
También debe verificar occupation
con Array#includes
.
const occupationExists = value => users.some(user => user.occupation.includes(value) );
Esto debería funcionar, devuelve verdadero/falso dependiendo de si la ocupación existe o no.
let users = [ { name: 'bob', occupation: ['Teacher', 'Store Owner'], }, { name: 'grace', occupation: ['Doctor'], }, ] const occupationExists = (value) => { let res = users.filter((user) => user.occupation.indexOf(value) != -1 ) return res.length > 0 } let value = 'Doctor' console.log(occupationExists(value))
Aquí está el problema con user.occupation === value
: user.occupation
es una matriz de cadenas mientras que el value
es una cadena, por lo tanto, no puede comparar los dos. Puede usar Array#includes()
como lo indica @NinaScholz o puede usar otro Array#some()
y dentro de él puede comparar cadena con cadena: job === value
.
const users = [{name: 'bob',occupation: ['Teacher', 'Store Owner']}, {name: 'grace',occupation: ['Doctor']}]; //const occupationExists = value => users.some(user => user.occupation.includes(value)); //best answer //Alternative answer const occupationExists = value => users.some( user => user.occupation.some(job => job === value) ); console.log( occupationExists('Teacher') ); console.log( occupationExists('Developer') );