Con la información a continuación, estoy intentando recorrer cards , si hay un objeto helper anidado, devolver el title de ese objeto. Pero estoy recibiendo indefinidos o errores. Estaba pensando que tal vez reducir sería viable aquí.
Matriz de muestra:
cards: [ 0: { title: 'Something', logo: 'logo link here', }, 1: { title: 'Something 2', logo: 'logo link here', helper: { text: 'helper text', }, }, 2: { title: 'Something 3', logo: 'logo link here', }, ]código:
cards.filter((item) => { if (item.helper) setHelperActive({...helperActive, item.title: true}) }) let cards = [ { title: 'Something', logo: 'logo link here', }, { title: 'Something else', logo: 'logo link here', helper: { text: 'helper text', }, }, { title: 'Something', logo: 'logo link here', }, { title: 'Lorem Epsum', logo: 'logo link here', helper: { text: 'helper text', }, } ] let filtered = [] for(let i = 0; i < cards.length; i++) { if(cards[i].helper) { filtered.push(cards[i].title) } } console.log(filtered);la solución es usar el mapa, no el filtro, debería ser así: var titles = cards.map(card=>{ return card.title })
Usando .filter() y verificando si el objeto tiene un accesorio llamado helper . En caso de que varios objetos coincidan con los criterios, sus títulos se unirán como una cadena separada por comas.
Retazo
let cards = [ { title: 'Something', logo: 'logo link here', }, { title: 'Something 2', logo: 'logo link here', helper: { text: 'helper text', }, }, { title: 'Something', logo: 'logo link here', }, { title: 'Something 4', logo: 'logo link here', helper: { text: 'helper text', }, }, ] // to list titles from all matching objects as a comma-separated string console.log(cards.filter(ob => 'helper' in ob).map(({ title }) => title).join()); // suppose only the first matched object's title is required console.log(cards.find(ob => 'helper' in ob)?.title ?? 'no match found');