我正在尝试按属性过滤对象,但我无法使其正常工作。
对象中的数据结构如下:
我是通过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
答案 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)