[英]Filter array object children javascript
我需要過濾一個有孩子的數組
我正在使用 .filter 函數並且沒有按照我需要的方式過濾孩子
這是對象示例
var arr = {
"items":[
{
"name":"Stackoverflow",
"type":"development",
"children":[
{
"title":"web",
"titleName":"web site"
},
{
"title":"web",
"titleName":"site"
}
]
},
{
"name":"Jon Snow",
"type":"actor",
"children":[
{
"title":"foo 2",
"titleName":"foo 3"
},
{
"title":"no foo",
"titleName":"bar 2"
}
]
}
]
}
代碼示例:
var searchWord = 'foo'
arr.items.filter(item => {
return (item.children.some(c => c.titleName.indexOf(searchWord) > -1))
})
這將返回具有正確過濾器的項目,但我需要在返回中過濾子項
//The returned children
{
"name":"Jon Snow",
"type":"actor",
"children":[{title: "foo 2", titleName: "foo 3"}, {title: "no foo", titleName: "bar 2"}]
}
//The expected should be
{
"name":"Jon Snow",
"type":"actor",
"children":[{title: "foo 2", titleName: "foo 3"}]
}
嘗試這個
arr.items.filter(item => {
if (item.children.some(c => c.titleName.indexOf(searchWord) > -1)){
console.log(item);
item.children=item.children.find(x=>x.titleName.indexOf(searchWord) > -1);
return item
}
})
您實際上並未過濾子項,而是僅過濾頂級項目。
這應該可以正常工作:
var searchWord = 'foo'
res = arr.items.filter(item => {
item.children = item.children.filter(c => c.titleName.indexOf(searchWord) > -1);
return (item.children.length > 0);
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.