React - 按对象属性过滤

IT技术 javascript reactjs firebase filter firebase-realtime-database
2021-05-02 20:17:26

我正在尝试按属性过滤对象,但无法使其工作。

对象中的数据结构如下:

在此处输入图片说明

我正在通过 UID 获取数据,然后映射来自该对象的所有项目,但我无法使过滤器工作。

Render 方法如下所示:

  render() {
    return(
      <div>
        {Object.keys(this.state.dataGoal)
          .filter(key => key.main == true)
          .map( (key, index) => {
            return <div key={key}>
                     <h1>{this.state.dataGoal[key].name}</h1>
                     <p>{this.state.dataGoal[key].main}</p>
                   </div>
          })}
      </div>

任何想法我做错了什么?

感谢您的帮助,Jakub

2个回答

假设这this.state.dataGoal是来自已发布目标数组的对象,那么您的过滤器是错误的。应该:

{Object.keys(this.state.dataGoal)
  .filter(key => this.state.dataGoal[key].main === true)
  .map((key, index) => {
    return <div key={key}>
             <h1>{this.state.dataGoal[key].name}</h1>
             <p>{this.state.dataGoal[key].main}</p>
           </div>
  })}

请注意,现在这是.filter(key => this.state.dataGoal[key].main === true)因为 key 是字符串,类似于Khasdfasdfasdfasdfads您希望goal通过此键访问object 以检查其main属性。

Object.keys返回该keys对象的 ,这意味着它返回一个包含该对象中每个键的字符串数组。

obj = { 'a': 1, 'b': 2 };
Object.keys(obj); // ['a', 'b']

因此,要访问该属性的值,您必须使用该键访问它,在您的情况下,它将是这样的:

filter(key => this.state.dataGoal[key].main == true)