[英]forEach objects value equals undefined
從firebase-realtime-database
接收到的數據如下
{
"0": {
"id": 10250903,
...
},
"1": {
"id": 10810490,
...
},
...
}
設置產品的setProducts
const [products, setProducts] = useState();
const {isLoading, setIsLoading} = useData();
useEffect(async () => {
setIsLoading(true);
await firebase
.database()
.ref('events')
.once('value')
.then((events) => {
setProducts(events);
})
.finally(() => setIsLoading(false));
}, []);
我試圖迭代 object 來獲取值
products?.forEach((product) => {
console.log(product);
});
結果:
Object {
"id": 10250903,
...
}
Object {
"id": 10810490,
...
}
但是當我嘗試訪問id
值時,控制台打印 undefined
products?.forEach((product) => {
console.log(product.id); // undefined
});
undefined
undefined
我被困住了,我嘗試了一切。
Object.values(products)
將不起作用,因為在收到數據之前產品將是未定義的。你說:
Object.values(products) 將不起作用,因為在收到數據之前產品將是未定義的。
我認為您非常接近解決方案。 使用products || {}
products || {}
處理products
undefined
或null
的情況。
var products = {
"0": {
"id": 10250903,
},
"1": {
"id": 10810490,
},
}
Object.values(products || {}).forEach(p => console.log(p.id))
如果您正在將產品轉換為新的產品集合, reduce
可能會變得有用:
Object.values(products || {}).reduce((acc, p) => {
acc[p.id] = p;
return acc;
}, {})
=>
{
"10250903": {
"id": 10250903,
...
},
"10810490": {
"id": 10810490,
...
}
}
或者:
Object.values(products || {}).reduce((acc, p) => {
acc.push(p.id)
return acc;
}, [])
=> [10250903, 10810490]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.