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>
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
