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


當我們用一個東西時候我們必須知道的是?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.。這樣我們就完成了這個功能,當然這個功能還不完美,沒做 數據類型限制等等。可能寫得還不好。。。但是希望思路能夠有點用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM