Quiero filtrar mi instantánea, pero a veces obtengo [indefinido], no quiero volver indefinido en el interior, ¿cuál es el problema?
return snapshot.docs.map((doc) => { const jn = JSON.parse(doc.data().jsonData) const res= jn.attributes.find(t => t.typet === tokenAttrs[0].name); if(res){ return doc.data() } })Muchas formas de solucionarlo. Una sería usar un foreach y enviar el nuevo valor a una nueva matriz. o filtra los valores vacíos de su resultado antes de devolverlo. como eso:
const r = snapshot.docs.map((doc) => { const jn = JSON.parse(doc.data().jsonData) const res= jn.attributes.find(t => t.typet === tokenAttrs[0].name); if(res){ return doc.data() } else { return null; } }) // then remove all empty values return r.filter(n => n) const res = []; snapshot.docs.forEach((doc) => { const jn = JSON.parse(doc.data().jsonData) const res= jn.attributes.find(t => t.typet === tokenAttrs[0].name); if (res){ res.push(doc.data()); } }) return res;Puede que no pueda encontrar el atributo que coincida con la condición, porque la res no está definida. Usted deberia comprobar esto.
Puede usar la función de filter de esta manera:
return snapshot.docs.map(doc => { const jn = JSON.parse(doc.data().jsonData); const res = jn.attributes.find(t => t.typet === tokenAttrs[0].name); if (res) return doc.data(); }).filter(_ => _ !== undefined); Esto eliminará los valores undefined de la matriz.