1. 程式人生 > >數組中的filter函數,遞歸以及一些應用。

數組中的filter函數,遞歸以及一些應用。

都沒有 name 返回 。。 filter 簡單 where 忽略 ldr

當我們用一個東西時候我們必須知道的是?why---where----how---when。一個東西我們為什麽用?在哪用?怎麽用?何時用?而不是被動的去接受一些東西。用在js裏邊我覺得也會試用。一直追求源生js,雖然也都背過好多東西,但是隨著時間的流逝,工作的繁忙都忘了,有時甚至一點印象都沒有,這讓我開始思考我的學習方法了已經思維方式了。我們要記得不是簡單的那個單詞然後開始聯想這個單詞有什麽用?一定是我要做什麽事情?然後聯想到誰可以做。帶有目的性的學習。

現在有十個人(也就是數組)需要我們把屬虎的人給跳出來。我們該怎麽做?一定是一個一個問。你屬虎嗎?他要回答是。那麽拉到一邊。如果不是 ,忽略繼續下一個。最終得到的就是一個屬虎的人組成的隊列(數組)。那麽js中的filter就是做的類似的功能。判斷一個數組中滿足一定條件的元素並且返回這些元素組成的數組。

來看個例子,有一個數據

 1 var data = [
 2   {
 3     id: 1,
 4     name: ‘a‘,
 5     children:[
 6       {
 7         id: 2,
 8         name:‘b‘,
 9         children:[
10           {
11             id:3,
12             name:‘c‘
13           }
14         ]
15       }
16     ]
17   }
]

現在讓我取得data中id為3的數據。怎麽做?這個問題涉及到了遞歸問題。什麽叫遞歸?就是滿足一定的條件就做重復的動作。

那麽讓我們來寫個函數來實現這個功能

function getItem (data,id){
  let result;
  result = data.filter (function (item){
    return item.id === id
  })
  if (data.children){
    result = result.concat(getItem(data.children,id))
  }
  return result
}

1:我們什麽時候遞歸,一定是這個 item含有children的時候。那麽重復的動作是什麽?就是遍歷數組,一個一個進行判斷是否id為3.。這樣我們就完成了這個功能,當然這個功能還不完美,沒做 數據類型限制等等。可能寫得還不好。。。但是希望思路能夠有點用。

數組中的filter函數,遞歸以及一些應用。