首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >forEach对象值等于未定义

forEach对象值等于未定义
EN

Stack Overflow用户
提问于 2022-05-22 02:51:38
回答 1查看 68关注 0票数 -1

firebase-realtime-database收到的数据如下

代码语言:javascript
复制
{
  "0": {
    "id": 10250903,
    ...
  },
  "1": {
    "id": 10810490,
    ...
  },
    ...
}

代码到setProducts

代码语言:javascript
复制
  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));
  }, []);

我试图迭代对象以获得值。

代码语言:javascript
复制
products?.forEach((product) => {
              console.log(product);
});

结果:

代码语言:javascript
复制
Object {
  "id": 10250903,
  ...
}
Object {
  "id": 10810490,
  ...
}

但是,当我尝试访问id值时,控制台会打印未定义的

代码语言:javascript
复制
products?.forEach((product) => {
              console.log(product.id); // undefined
});
代码语言:javascript
复制
undefined
undefined

我被困住了我什么都试过了。

  • Object.values(products)将无法工作,因为在数据是received.
  • Creating之前,产品将无法定义,而映射到它的映射也不起作用。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-22 03:30:47

你说:

Object.values(产品)将无法工作,因为产品将在收到数据之前未定义。

我认为你非常接近解决方案。使用products || {}处理productsundefinednull的情况。

代码语言:javascript
复制
var products = {
  "0": {
    "id": 10250903,
  },
  "1": {
    "id": 10810490,
  },

}
Object.values(products || {}).forEach(p => console.log(p.id))

如果要将产品转换为新的产品集合,reduce可能会变得有用:

代码语言:javascript
复制
Object.values(products || {}).reduce((acc, p) => { 
  acc[p.id] = p; 
  return acc; 
}, {})

=>

代码语言:javascript
复制
{
  "10250903": {
    "id": 10250903,
    ...
  },
  "10810490": {
    "id": 10810490,
    ...
  }
}

或者:

代码语言:javascript
复制
Object.values(products || {}).reduce((acc, p) => { 
  acc.push(p.id)
  return acc; 
}, [])

=> [10250903, 10810490]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72334478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档