フィルタ配列オブジェクトの子のjavascript

カルロスAnez:

私は子供を持つ配列をフィルタリングする必要があります

私は.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))
})

これは正しくフィルタが、引き換えに子供をフィルタリングIの必要性を持っているアイテムを返します。

//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"}]
}
クリスチャン・フリッツ:

あなたが実際にあなたが唯一のトップレベルのアイテムをフィルタリングしている、子供をフィルタリングされていません。

これは正常に動作するはずです:

var searchWord = 'foo'
res = arr.items.filter(item => {
  item.children = item.children.filter(c => c.titleName.indexOf(searchWord) > -1);
  return (item.children.length > 0);
})

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=32131&siteId=1