js中数组迭代函数—(2)会生成新数组

有两个迭代器方法可以产生新数组:  map() 和 filter()
1、 map(), map() 和 forEach() 有点儿像, 对数组中的每个元素使用某个函数。 两者的区别是 map() 返回一个新的数组, 该数组的元素是对原有元素应用某个函数得到的结果。
 
< script  type = "text/javascript" >
function  curve ( grade ) 
{
return  grade  +=  5 ;
}
function  doMap ( )
{
var  grades  =  [ 77 ,  65 ,  81 ,  92 ,  83 ]  ;
var  newgrades  =  grades .  map ( curve ) ;
document . write ( newgrades  ) ;
}
< /script>
 
 
< script  type = "text/javascript" >
function  first ( word ) 
{
     return  word [ 0 ]  ;
}
function  doMap ( )
{
     var  words  =  [ "for"  ,  "your"  ,  "information"  ]  ;
     var  acronym  =  words .  map ( first ) ;
     document . write ( acronym . join ( " "  )) ;
}
< /script>
 
  在上面这个例子中, 数组 acronym 保存了数组 words 中每个元素的第一个字母。 然而, 如果想将数组显示为真正的缩略形式, 必须想办法除掉连接每个数组元素的逗号, 如果直接调用 toString() 方法, 就会显示出这个逗号。 使用 join() 方法, 为其传入一个空字符串作为参数, 则可以帮助我们解决这个问题。
2、
filter(), filter() 和 every() 类似, 传入一个返回值为布尔类型的函数。 和 every() 方法不同的是,当对数组中的所有元素应用该函数, 结果均为 true 时, 该方法并不返回 true, 而是返回一个新数组, 该数组包含应用该函数后结果为true 的元素。
 
< script  type = "text/javascript" >
function  passing ( num )
{
     return  num  >=  60 ;
}
function  doFilter ( )
{
     var  grades  =  [ ]  ;
     for  ( var  i  =  0 ;  i  <  20 ;  ++ i ) 
     {
         grades [ i ]  =  Math .  floor ( Math .  random ( )  *  101 ) ;
     }
     var  passGrades  =  grades .  filter ( passing ) ;
     document . write ( " All grades: " ) ;
     document . write ( grades ) ;
     document . write ( " Passing grades: "  ) ;
     document . write ( passGrades ) ;
}
< /script>
 
 
< script  type = "text/javascript" >
function  isEven ( num ) 
{
     return  num  %  2  ==  0 ;
}
function  isOdd ( num ) 
{
     return  num  %  2  !=  0 ;
}
function  doFilter ( )
{
     var  nums  =  [ ]  ;
     for  ( var  i  =  0 ;  i  <  20 ;  ++ i ) 
     {
      nums [ i ]  =  i +1 ;
     }
     var  evens  =  nums . filter ( isEven ) ;
     document . write ( " Even numbers: "  ) ;
     document . write ( evens ) ;
     var  odds  =  nums .  filter ( isOdd ) ;
     document . write ( " Odd numbers: "  ) ;
     document . write ( odds ) ;
}
< /script>
 
  过滤字符串 数组
< script  type = "text/javascript" >
function  afterc ( str ) 
{
     if  ( str .  indexOf ( "cie"  )  >  -  1 ) 
     {
         return  true ;
     }
     return  false ;
}
 
function  doFilter ( )
{
     var  words  =  [ "recieve"  ,  "deceive"  ,  "percieve"  ,  "deceit"  ,  "concieve"  ]  ;
     var  misspelled  =  words .  filter ( afterc ) ;
     document . write ( misspelled ) ;
}
< /script>
 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值