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

时间: 2024-10-04 04:12:45

数组中的filter函数,递归以及一些应用。的相关文章

js数组中indexOf/filter/forEach/map/reduce详解

今天在网上看到一篇帖子,如题: 出处:前端开发博客 (http://caibaojian.com/5-array-methods.html) 在ES5中一共有9个Array方法,分别是: Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.prototype.some Array.prototype.forEach Array.prototype.map Array.prototype.f

Python中的filter()函数的用法

转载自:脚本之家 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的时,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. 例如,在一个list中,删掉偶数,只保留奇数,可以这么写: def is_odd(n): return n % 2 == 1 filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]) # 结果: [1, 5

Python3版本中的filter函数,map函数和reduce函数

一.filter函数: filter()为已知的序列的每个元素调用给定的布尔函数,调用中,返回值为非零的元素将被添加至一个列表中 1 def f1(x): 2 if x>20: 3 return True 4 else: 5 return False 6 7 l1 = [ 1, 2, 3, 42, 67, 16 ] 8 print(filter(f1, l1)) 9 #输出如下: 10 #<filter object at 0x000000000117B898> 11 l2 = filt

数组中的reduce 函数理解

第一次见到reduce 是在js 的高级程序设计中,它的意思是把一个数组减少为一个数,举的例子是数组中元素的求和.它接受一个函数作为参数,函数又有两个参数,一个是prev, 前一个值,一个是next, 后一个值,然后函数体就是返回相加的值. let array = [1, 3, 5]; let sum = array.reduce((prev, next) => { return prev + next; }) console.log(sum); 我对reduce 的理解也仅限于此,只停留在了表

python3中的filter()函数

filter() 函数是一个对于可迭代对象的过滤器,过滤掉不符合条件的元素,返回的是一个迭代器,如果要转换为列表,可以使用 list() 来转换.该函数接收两个参数,第一个为函数的引用或者None,第二个为可迭代对象,可迭代对象中的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到迭代器中下面看下fiter()的用法:第一个参数为None: [Python] 纯文本查看 复制代码 ? 1 2 3 4 my_list = [1, '', 2, '

结构体数组中元素为函数

1 #include<stdio.h> 2 typedef struct A 3 { 4 int a; 5 char b; 6 } a; 7 8 int foo() 9 { 10 return 1; 11 } 12 13 char boo() 14 { 15 return 'b'; 16 } 17 int main(int args,char * arg[]) 18 { 19 int i; 20 a a1[]= 21 { 22 {foo(),boo()}, 23 {foo(),boo()},

PHP数组函数 数组中的杂项

array_change_key_case( $arr ,CASE_LOWER || CASE_UPPER) 返回键名全为大写或者是小写的数组 array_rand($arr , num) 从数组中随机取出一个或多个单元 shuffle(&$arr)   将数组打乱 array_chunk($arr , $size , bool) 把$arr 拆分,每个数组为$size 个元素 , bool 是否保持原来索引 array_combine( $arr , $arr2) 合并两个数组  $arr 的

JavaScript中的回调函数

在学习JavaScript的过程中遇到了很多,使用到回调函数的例子,出现了许多疑问,就由一个栗子开始吧: 在JavaScript中接触的第一个回调函数是在setInterval()和setTimeout()中出现的: 1 var num = 10; 2 3 var interValId = setInterval(function (){ 4 console.log(num); 5 num--; 6 if(num==0){ 7 clearInterval(interValId); 8 } 9 }

vuex中filter的使用 &amp;&amp; 快速判断一个数是否在一个数组中

vue中filter的使用 computed: mapState({ items: state => state.items.filter(function (value, index, arr) { return index < 5 }) }), 如上所示,对于vuex,我们在使用mapState获取state时, 可以使用filter来过滤其中的元素,在filter的回调函数中接受三个参数,第一个是value,即每一个元素的值: 第二个是index, 即每一个元素所在的index, 第三个