有两个迭代器方法可以产生新数组:
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>
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>