数组的5中迭代方法 filter()、map()、forEach()、every()、 some()

先来看个牛客网上的题目吧,

在数组 arr 中,查找值与 item 相等的元素出现的所有位置 
输入例子:
findAllOccurrences('abcdefabc'.split(''), 'a').sort()

输出例子:
[0, 6]

有的大牛是这样子做的的。

function findAllOccurrences(arr, target) { 

  var temp = []; 
      arr.forEach(function(val,index){ 
          val !== target ||  temp.push(index); 
      }); 
      return temp; 
  }

受到启发 这样子做的

function findAllOccurrences(arr, target) {

    var newArr =[];
    arr.map(function(item,index){
        return (item==target)&&(newArr.push(index));
    });
    return newArr;
}

其实呢原理 都是数组中的5中迭代方法。
好了废话少说,直奔主题吧。
数组中的迭代方法
ECMAScript5 为数组定义了5个迭代方法。每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域 对象—–影响this的值。传入这些方法中的函数会接收三个参数:数组项的值item、该项在数组中的位置index 和数组对象本身array。根据使用的方法不同,这个函数执行后的返回值可能会也可能不会影响方法的返回值。
以下是这5个迭代方法的作用,

  1. every()对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true。
  2. some()对数组中的每一项运行给定的函数,如果该函数对任一项返回true,则返回true。
  3. filter()对数组中的每一项运行给定的函数,返回该函数会返回true的项组成的数组。
  4. map()对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。
  5. forEach()对数组中的每一项运行给定的函数,这个方法没有返回值。

    这5个迭代方法中,最相似的是every()和 some(),它们都用于查询数组中的项是否满足某个条件。
    对every()来说,传入的函数必须对每一项都返回true,这个方法才返回true;否则,它就返回false。
    而some()方法则是只要传入的函数对数组中的某一项返回true,就会返回true。

还是举例子说明问题吧!

var arr =[1,2,3,4,6,2,4,6,7,9];
    var everyResult = arr.every(function (item,index,array) {
        return (item > 2);
    });
    console.log(everyResult); // false

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

以上代码调用了every()和some(),传入的函数只要给定项大于2 就会返回true。
对于every()因为只有部分数组符合条件,所以它返回false
对于some()因为至少有一项是满足条件的 所以它返回true

var arr =[1,2,3,4,6,2,4,6,7,9];
var filterResult = arr.filter(function (item,index,array) {
        return (item >2);
    });
    console.log(filterResult); //[3, 4, 6, 4, 6, 7, 9]

通过调用filter()方法创建并返回了包含3, 4, 6, 4, 6, 7, 9的数组,因为传入的函数对它们的每一项都返回了true。
这个filter()方法对查询符合某些条件的所有数组项非常有用。

var arr =[1,2,3,4,6,2,4,6,7,9];
var mapResult = arr.map(function (item,index,array) {
        return item *2;
    });
    console.log(mapResult); //[2, 4, 6, 8, 12, 4, 8, 12, 14, 18]

map()方法返回的数组包含给每个数乘以2之后的结果。
这个方法适合创建包含的项与另一个数组一一对应的数组

var arr =[1,2,3,4,6,2,4,6,7,9];
 arr.forEach(function (item,index,array) {
        //执行某些操作,这个操作是我自己写着玩的
        if(item == 2){
            console.log(index);  // 1 5
        }
    });

forEach() 只是对数组中的每一项运行传入的函数,这个方法没有返回值,本质上与使用for循环迭代数组一样。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值