当我们用一个东西时候我们必须知道的是?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.。这样我们就完成了这个功能,当然这个功能还不完美,没做 数据类型限制等等。可能写得还不好。。。但是希望思路能够有点用。
时间: 2024-10-04 04:12:45