gpt4 book ai didi

javascript - 获取对象数组的值

转载 作者:行者123 更新时间:2023-12-04 09:37:25 24 4
gpt4 key购买 nike

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

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: {location: "Mānana Ridge Trail, Pearl City, HI, USA", geolocation: "87z9yj0x5"}
1:{timePosted:“13:50:05 GMT-1000(HST)”,地理位置:“87zc52x78”}
2: {userId: "QevGxIV57lZuC92oTjp80N9WcIy2", title: "Koko crater arch"}
3: {timePosted: "13:46:55 GMT-1000 (HST)", image: "0.1565895502212029"}
4:{标题:“自行车”,日期发布:“2020 年 6 月 12 日星期五”}
长度:5
__proto__:数组(0)
我觉得我尝试了一百万种方法来获取数组的长度或其中的值,但我无法获得任何一个。
我的一些尝试涉及来自这些 SO 帖子的建议(这些尝试是为了获得长度):
data.length
Object.keys(data).length
我非常感谢有关如何获取对象的长度和值的任何建议。
* 我的目标
我需要获取数组的长度,在这种情况下为 5。此外,我还需要能够获取我的值,例如 userId在数组的第三个元素中。

最佳答案

看来您的代码是异步的:

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不是因为 this .即, 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);
});

关于javascript - 获取对象数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62505470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com