获取对象数组的值

幻觉

出于某种原因,我最难以获取存储在数组中的对象的值。这是我填充数组的方式:

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个元素内的。

zr0gravity7

看来您的代码是异步的:

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按原样显示数组(“活动”),而.lengthlength执行语句时访问数组属性。

本质上来说,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取数组的对象值

来自分类Dev

从数组获取对象值-NodeJs

来自分类Dev

从数组动态获取对象的值

来自分类Dev

获取对象数组内对象属性的值

来自分类Dev

lodash:从对象数组获取对象值

来自分类Dev

mongoDB:获取对象数组的所有值

来自分类Dev

从数组中获取包含特定值的对象

来自分类Dev

从数组内部的对象获取属性值

来自分类Dev

如何获取对象中的数组值?

来自分类Dev

BitGO-从对象数组获取MIN值

来自分类Dev

从对象数组获取唯一值

来自分类Dev

角度模型无法获取对象数组值

来自分类Dev

如何从数组中获取对象的值?

来自分类Dev

获取数组wih对象javascript的值

来自分类Dev

通过对象值获取数组项

来自分类Dev

BitGO-从对象数组获取MIN值

来自分类Dev

获取键值等于数组值的对象

来自分类Dev

如何获取数组内的对象值

来自分类Dev

Js / Lodash获取数组值的父对象

来自分类Dev

在对象数组中获取键值的值

来自分类Dev

从对象数组中获取属性的值

来自分类Dev

如何获取 Json 对象数组值?

来自分类Dev

在 JavaScript 中使用数组获取对象的值

来自分类Dev

如何获取对象中的子数组值

来自分类Dev

如何从数组中获取特定值的对象

来自分类Dev

获取Javascript中对象的值到数组

来自分类Dev

从 Json 对象获取数组中的值

来自分类Dev

获取数组中对象内的值

来自分类Dev

从对象数组中获取唯一值