啥子是迭代?可以简单地理解为按顺序访问目标(数组、对象等)中的每一项(其实和遍历概念没什么差别)

数组的迭代被我分为两种:

  • 查找
  • 遍历

查找:

  1.indexOf(item,start) 

    该方法搜索指定元素值位置,并返回下标。

    参数:item是要查找的值,start是指你要从哪里开始找(该参数可选)。ps:start是可以取负值的,举个栗子indexOf(x,-5)表示从倒数第6个开始(因为倒数第一个是0嘛),一直找到正序的第0个

    如果多次出现,则返回第一次出现的下标(其实找到了就不会接着往后找了);如果没出现,返回-1。

    var fruits = ["Apple", "Orange", "Apple", "Mango"];
    var a = fruits.indexOf("Apple");
    console.log(a);//0

  

  2.lastIndexOf(item,start)  与上面方法用法一样,不同的地方是,他是逆行,是从结尾开始找的。start也能指定负值,如果start取-5,则表明从下标为5的地方开始,一直往前找。

    var fruits = ["Apple", "Orange", "Apple", "Mango"];
    var a = fruits.lastIndexOf("Apple");
    console.log(a);//2

  3.find()  方法返回通过测试函数的第一个数组元素的值。

  参数:(项目值,项目索引,数组本身)

var numbers = [4, 9, 16, 25, 29];
var first = numbers.find(myFunction); function myFunction(value, index, array) {
return value > 18;
}

  

  4.findIndex()  方法返回通过测试函数的第一个数组元素的索引。

  参数:(项目值,项目索引,数组本身)

var numbers = [4, 9, 16, 25, 29];
var first = numbers.findIndex(myFunction); function myFunction(value, index, array) {
return value > 18;
}

上面的几个方法没什么好讲的,接下来才是重点。

遍历:这类方法有7个

  1.some()

  2.every()

    两者的函数都接受三个值(项目值,项目索引,数组本身)

    这两个方法都是依次对数组的每项进行判断,返回boolean类型的值。不同的是,some是只要有一项满足条件就返回true,而every要求所有项都满足条件才会返回true。

    举个栗子: 

  var a=[1,2,3,4,5,4,3,2,1];
  var everyResult=a.every(function(item,index,a){
  return (item>2);
  });
  var someResult=a.some(function(item,index,a){
  return (item>2);
  });
  alert("everyResult:"+everyResult);//false
  alert("someResult:"+someResult);//true

当然,也可以也成箭头函数的形式:

a.some((item)=>{return item>2})

  这两个方法只做判断,都不会对数组进行改变。

  3.forEach()

  4.filter()

  5.map()

  为什么这三个一起讲,因为他们像,与前面some,every一起常作为面试题考。

  三者的函数都接受三个值(项目值,项目索引,数组本身)

  forEach:其就和for循环异曲同工,循环遍历,对每项进行操作。

  map:和forEach非常相似,其返回的是 每次函数调用后的结果所组成的数组

  filter:与上面两者相似,但是其返回的是 函数调用结果值为true的项 (将调用的函数理解成表达式,即返回符合这个表达式所有项组成的新数组)

  区别:

    map和foreach其实用法上没啥子区别,但是!还是有点差别的,foreach是没有返回值的

    然后,filter顾名思义,过滤器,是过滤掉数组不符合条件的项。所以用途上,filter会有很大的不同,常用于筛选掉不要的数组项。

    我还是举栗子吧:

  var a=[1,2,3,4,5,4,3,2,1];
  var filterResult=a.filter(function(item,index,a){
return (item>2);
});
var mapResult=a.map(function(item,index,a){
return item*2;
});
  var foreachResult=a.forEach(function(item,index,a){
  if(item<5) a[index]=0;
  });
  alert("filterResult:"+filterResult);  //3,4,5,4,3
  alert("mapResult:"+mapResult);     //2,4,6,8,10,8,6,4,2
  alert("foreachResult:"+foreachResult); //underfined
  alert("foreachResult:"+a);        //0,0,0,0,5,0,0,0,0

  6.reduce()  

  7.reduceRight()

  参数: 

    • 总数(初始值/先前返回的值)
    • 项目值
    • 项目索引
    • 数组本身

  这次我直接举栗子:

var a=[1,2,3,4,5,4,3,2,1];

var sum=a.reduce(function (prev,cur,index,array){
  return prev+cur;
})
alert("sum:"+sum);

  上诉用法是最常用的用法,用于对数组所有项进行求和。事实上求积也是可以的,这个方法的灵魂就是有了这个prev值,具体看你如何以应用(不过事实上用的不多,在外部var一个sum变量也可以做到)

  ps:reduce()和reduceRight()对于空数组是不会执行回调函数的。

  补充一点,注意:forEach,filter,every,some会跳过空位,map会跳过空位,但是会保留这个值。

  个人愚见,不喜憋着。

最新文章

  1. [转]git fetch 的简单用法:更新远程代码到本地仓库
  2. ASP.NET生成缩略图的代码
  3. 让CentOS能用yum自动安装rar和unrar
  4. CSS3——选项卡切换
  5. CSS_使用css布局
  6. C++解析JSON之JsonCPP
  7. 【Android - MD】之TabLayout的使用
  8. Python 2.7 学习笔记 基本知识
  9. [M]带属性块参照的转换
  10. php和js的转成整数的方法
  11. js---BOW---页面打开方式,跳转方式 2017-03-24
  12. pyqt5将图片插入面板
  13. 【English】20190312
  14. Python 进程池的回调函数
  15. net-snmp开发教程
  16. Codeforces Round #407 div2 题解【ABCDE】
  17. Linux下使用wget下载FTP服务器文件
  18. Mysql 复制工作原理
  19. 【排序算法】冒泡排序(Bubble Sort)
  20. [SceneKit] 不会 Unity3D 的另一种选择

热门文章

  1. Elasticsearch学习,请先看这一篇
  2. docker的入门简介
  3. USB hub串口绑定
  4. 五、bootstrap-Table Treegrid
  5. Java高频经典面试题(第一季)四:方法的参数传递机制
  6. oracle client 卸载
  7. PHP数组函数实现栈与队列的方法介绍(代码示例)
  8. react教程 — 开发 总结
  9. eclipse 中的.classpath和.project文件的具体作用(转)
  10. hdu6578 2019湖南省赛D题Modulo Nine 经典dp