簡體   English   中英

過濾數組對象子對象javascript

[英]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
   }
})

https://jsfiddle.net/ahwctv8q/

您實際上並未過濾子項,而是僅過濾頂級項目。

這應該可以正常工作:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM