反应-按对象属性过滤

Jak*_*par 5 javascript filter firebase reactjs firebase-realtime-database

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

对象中的数据的结构如下:

在此处输入图片说明

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

渲染方法如下所示:

  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>
Run Code Online (Sandbox Code Playgroud)

有什么想法我做错了吗?

感谢您的帮助,雅库布

dfs*_*fsq 5

假设这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>
  })}
Run Code Online (Sandbox Code Playgroud)

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


Tia*_*gel 3

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

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

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

filter(key => this.state.dataGoal[key].main == true)
Run Code Online (Sandbox Code Playgroud)