数组中的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.。这样我们就完成了这个功能,当然这个功能还不完美,没做 数据类型限制等等。可能写得还不好。。。但是希望思路能够有点用。

原文地址:https://www.cnblogs.com/hjdjs/p/7815354.html