出于某种原因,我最难以获取存储在数组中的对象的值。这是我填充数组的方式:
var arrActivities = [];
//other not needed variables here..
function logIt(){
firebase.firestore().collection('PostedFunActivities').where("geolocation", ">=", range.lower).where("geolocation", "<=", range.upper).get().then((querySnapshot) =>{
querySnapshot.forEach((doc) =>{
arrActivities.push(doc.data());
})
});
console.log(arrActivities);
console.log(arrActivities.length);
}
我的结果console.log
如下:
[] 0:{位置:“美国夏威夷州珍珠市MānanaRidge Trail”,地理位置:“ 87z9yj0x5”} 1:{时间发布:“ 13:50:05 GMT-1000(HST)”,地理位置:“ 87zc52x78” } 2:{userId:“ QevGxIV57lZuC92oTjp80N9WcIy2”,标题:“科科火山口拱门”} 3:{timePosted:“ 13:46:55 GMT-1000(HST)”,图片:“ 0.1565895502212029”} 4:{title:“自行车”,日期发布:“ 2020年6月12日星期五”} 长度:5个__proto__: Array(0)
我觉得我尝试了一百万种方法来获取数组的长度或其中的值,但是我无法做到这一点。我的一些尝试涉及来自这些SO帖子的建议(这些尝试是为了获取长度):
data.length
Object.keys(data).length
我非常感谢关于如何获得对象的长度和值的任何建议。
*我的目标是,
我需要获取数组的长度,在这种情况下,该长度将为5。另外,我还需要能够获取我的值,例如userId
数组中第3个元素内的。
看来您的代码是异步的:
function logIt(){
firebase.firestore().collection('PostedFunActivities').where("geolocation", ">=", range.lower).where("geolocation", "<=", range.upper).get().then((querySnapshot) =>{
querySnapshot.forEach((doc) =>{
arrActivities.push(doc.data());
})
});
console.log(arrActivities);
console.log(arrActivities.length);
}
这.then
意味着您的匿名箭头函数回调将仅arrActivities
在.get()
promise解析后填充数组。
之所以console.log
显示具有长度的填充数组而arrActivites.length
之所以不是,是因为这个。即,console.log
按原样显示数组(“活动”),而.length
在length
执行语句时访问数组的属性。
本质上来说,console.log
变量可能会异步地将该变量显示为实时引用,因此,当您看到记录的输出时,它可能会与第一次记录时有所不同。另一方面,length
保证访问数组的属性是同步的,这意味着当您记录数组的长度时,记录的值是不变的。
一种解决方案是将logIt
函数体包装在Promise中,然后仅等待返回的内容arrActivities
:
function logIt(){
return new Promise((resolve, reject) => {
firebase.firestore().collection('PostedFunActivities').where("geolocation", ">=", range.lower).where("geolocation", "<=", range.upper).get().then((querySnapshot) => {
querySnapshot.forEach((doc) =>{
arrActivities.push(doc.data());
})
resolve(arrActivities);
});
});
}
logIt().then((result) => {
console.log(result.length);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句