对一个数组 filter、some、map、foreach的操作分别有什么作用?

对一个数组 filter、some、map、foreach的操作分别有什么作用?

1.背景介绍


使用JavaScript数组常常需要对数组进行遍历、迭代操作。而我们常用的就是for语句对数组进行迭代。然而在ECMAscript5已经为数组定义了5个迭代的方法,分别是:filter、some、map、foreach、every,下面我们讲讲它们的具体作用。


2.知识剖析


2.1每个方法的作用

          每个方法都接收两个参数:要在每一项上运行的函数和(可选)运行该函数的作用域对象, 传入这些方法中的函数接收三个参数,数组项的值,该项在数组中位置,和数组对象本身。根据方法不同,作用也不同

     

every()

 对数组中每一项运行给定函数,如果该函数每一项都返回true,则返回true

filter()

对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组

forEach()

对数组中每一项运行给定函数,没有返回值。

map()

对数组中每一项运行给定函数,返回每次函数调用的结果组成的数组

some()

对数组中每一项运行给定函数,如果函数对任意一项返回true,则返回true。

以上方法都不会修改数组中的包含项

3.常见问题

     如何选择,有何应用

4.解决方案


     如果用for循环来选择符合条件的项并push到新数组相对麻烦,不够简单

     迭代相比于for循环遍历,代码结构简单、规整

      some()和every()可以用来进行数组项的判断。如果你要得到需要的项,可以用filter(),map()适合创建包含的项与另外一个数组一一对应的数组

5.编码实战

  

// //every

var num = [ 1, 2, 3, 4, 5];
var everyResault = num. every( function ( item, index, array) {
return (item > 2);
});
console. log(everyResault);

//some
var someResault = num. some( function ( item, index, array) {
return (item > 2);
});
console. log(someResault);

filter
var filterResault = num. filter( function ( item, index, array) {
return (item > 2);
});
console. log(filterResault);
//如果用for循环
var num2 = [];
for (i = 0; i < num.length; i ++) {
if (num[i] > 2) {
num2. push(num[i]);
};
};
console. log(num2);
//map
var mapResault = num. map( function ( item, index, array) {
return item * 2;
// return (item > 2);
});
console. log(mapResault);
//forEach
var forResault = num. forEach( function ( item, index, array) {
console. log(item * 3)
});
console. log(forResault);


6.扩展思考

    递归和迭代的区别是什么,各有什么优缺点?

       程序调用自身称为递归,利用变量的原值推出新值称为迭代。

       递归的优点大问题转化为小问题,可以减少代码量,同时代码精简,可读性好; 缺点就是递归调用浪费了空间,而且递归太深容易造成堆栈的溢出。

       迭代的好处就是代码运行效率好,因为时间只因循环次数增加而增加,而且没有额外的空间开销; 缺点就是代码不如递归简洁


7.参考文献

JS高级程序设计


8.更多讨论

1,问:every和some区别

答:every每一项返回true才返回true,some是有一项返回true则返回true

2,问:every是每一项循环吗

答:没有,循环到false就停止了

3,问:filter和for区别

答:fliter可以返回需要的项组成的数组,大大简化了for循环操作的代码,简洁方便

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值