为什么地图返回 [undefined]?我该如何解决?
Why map is returning [undefined]? and how can i solve that?
我想过滤我的快照,但有时我会收到 [undefined],我不想 return undefined inside,这是什么问题?
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()
}
})
可能找不到符合条件的属性,导致res
未定义。你应该去看看。
多种解决方法。一种是使用 foreach 并将新值推送到新数组。或者在将结果发回之前过滤掉结果中的空值。像那样:
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)
使用 forEach()
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;
您可以这样使用 filter
函数:
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);
这将从数组中删除 undefined
个值。
Array.prototype.find
将搜索数组并获取所有匹配数据。如果没有找到,则 returns undefined
。您只需要创建一个逻辑 OR
表达式。请参阅下面的代码:
return snapshot.docs.map((doc) => {
const jn = JSON.parse(doc.data().jsonData)
// will now return null if there's no matched data.
const res = jn.attributes.find(t => t.typet === tokenAttrs[0].name) || null;
if(res){
// this will not return if `res` is null
return doc.data()
} else {
// you could do `else` here if you want to do something if there's no matched data.
// Do something
}
})
我想过滤我的快照,但有时我会收到 [undefined],我不想 return undefined inside,这是什么问题?
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()
}
})
可能找不到符合条件的属性,导致res
未定义。你应该去看看。
多种解决方法。一种是使用 foreach 并将新值推送到新数组。或者在将结果发回之前过滤掉结果中的空值。像那样:
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)
使用 forEach()
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;
您可以这样使用 filter
函数:
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);
这将从数组中删除 undefined
个值。
Array.prototype.find
将搜索数组并获取所有匹配数据。如果没有找到,则 returns undefined
。您只需要创建一个逻辑 OR
表达式。请参阅下面的代码:
return snapshot.docs.map((doc) => {
const jn = JSON.parse(doc.data().jsonData)
// will now return null if there's no matched data.
const res = jn.attributes.find(t => t.typet === tokenAttrs[0].name) || null;
if(res){
// this will not return if `res` is null
return doc.data()
} else {
// you could do `else` here if you want to do something if there's no matched data.
// Do something
}
})