React - 按对象属性过滤

时间:2017-04-25 12:37:10

标签: javascript reactjs firebase filter firebase-realtime-database

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

对象中的数据结构如下:

enter image description here

我是通过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>

任何想法我做错了什么?

感谢您的帮助, 的Jakub

2 个答案:

答案 0 :(得分:3)

假设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对象以检查其{ {1}}属性。

答案 1 :(得分:3)

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

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

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

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