有两个迭代器方法可以产生新数组: 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>
版权声明:本文为博主原创文章,未经博主允许不得转载。