【发布时间】:2017-11-21 08:56:27
【问题描述】:
数据样本:
nodes:[
{
label:"Egor1",
value:"Egor1",
restorePoint:"25/10/2017 10:00:29 PM",
vmcount:"2",
restorePointsCount:"",
children:[
{label:"disk111111111111111",
value:"disk1",
restorePoint:"3 days ago",
vmcount:"",
restorePointsCount:"11",
},
{label:"disk22222222222222",
value:"disk2",
name:"jobname2",
restorePoint:"4 days ago",
vmcount:"",
restorePointsCount:"11"},
{label:"disk555",
value:"disk552",
name:"jobnam555e2",
restorePoint:"4 days ago",
vmcount:"",
restorePointsCount:"11"}
]}
,
{
label:"Egor12",
value:"Egor12",
restorePoint:"25/10/2017 10:00:29 PM",
vmcount:"22",
restorePointsCount:"",
children:[
{label:"disk111111111111111",
value:"disk1",
restorePoint:"2 days ago",
vmcount:"",
restorePointsCount:"12",
},
{label:"disk22222222222222",
value:"disk2",
name:"jobname2",
restorePoint:"restorepoint4",
vmcount:"",
restorePointsCount:"12",}
]},
],
尝试下一步:
filter(e) {
var value = e.target.value;
this.setState({filterval: value})
this.setState({
filteredItems: !value
? false
: this.state.nodes.filter(function (item) {
return
item.children.value.toLowerCase().indexOf(value.toLowerCase()) !== -1;
})
})
}
但是过滤器想要工作,如何通过嵌套对象过滤?找不到任何示例。可以用 _lodash 做吗?
例如我搜索 标签:“磁盘111111111111111
结果必须是这样的数组:
{
label:"Egor1",
value:"Egor1",
restorePoint:"25/10/2017 10:00:29 PM",
vmcount:"2",
restorePointsCount:"",
children:[
{label:"disk111111111111111",
value:"disk1",
restorePoint:"3 days ago",
vmcount:"",
restorePointsCount:"11",
},
所以它不仅必须返回我搜索的元素,还必须返回有父母的孩子。
【问题讨论】:
-
为什么要连续打两次
this.setState? -
因为第一个进入输入,第二个进入过滤数组
-
你要过滤什么
-
所有孩子,可以有很多孩子
标签: javascript reactjs filter