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

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

  • 查找
  • 遍历

查找:

  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会跳过空位,但是会保留这个值。

  个人愚见,不喜憋着。

JS中的迭代(数组)的更多相关文章

  1. js中对arry数组的各种操作小结

    最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊,为了在以后的工作中写出最优化的代码,我 ...

  2. js中的伪数组

    一, 伪数组 1. 具有length属性 2. 按索引方式存储数据 3. 不具有数组的方法, 比如push(),pop()等 二, 生成伪数组的方法 在js中生成伪数组的方法比较多 1. functi ...

  3. js中字符串与数组的相互转换

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  4. js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符

    js中对arry数组的各种操作小结   最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...

  5. js课程 3-10 js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么

    js课程 3-10  js中字符串函数数组函数和其它语言中对应函数的区别和联系是什么 一.总结 一句话总结:js中是对象点方法的形式,这些方法都是对象的方法,而在php.java中却不是这样. 1.j ...

  6. JS中map list 数组的迭代

    后台传给前台一个map 前台如何迭代呢 $.post("getSys.jhtml", function(data){ var temp = ""; $.each ...

  7. [undefined,1] 和 [,1]的区别在哪里--认识js中的稀疏数组

    事情是这样的 今天我想写一个能快速生成一个自然数数组的函数,就是[0,1,2,3]这样的,然后我写了下面的代码: new Array(10).map((item, index) => { ret ...

  8. Js中的字符串/数组中常用的操作

    JS为每种数据类型都内置很多方法,真的不好记忆,而且有些还容易记混,现整理如下,以便以后查看: 一.String ①charAt()方法用于返回指定索引处的字符.返回的字符是长度为 1 的字符串. 语 ...

  9. js中 map 遍历数组

    map 方法会迭代数组中的每一个元素,并根据回调函数来处理每一个元素,最后返回一个新数组.注意,这个方法不会改变原始数组. 在我们的例子中,回调函数只有一个参数,即数组中元素的值 (val 参数) , ...

  10. js中关于一个数组中最大、最小值以及它们的下标的输出的一种解决办法

    今天在学习js中的数组时,遇到的输出一个数组中最大.最小值以及它们的下表,以下是自己的解决方法! <script type="text/javascript"> var ...

随机推荐

  1. java并发编程之美-阅读记录1

    1.1什么是线程? 在理解线程之前先要明白什么是进程,因为线程是进程中的一个实体.(线程是不会独立存在的) 进程:是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程中的 ...

  2. HBase学习记录

    HBase 使用docker搭建参考https://blog.csdn.net/baifanwudi/article/details/78498325 搭建好以后,网页端可以看到: terminal ...

  3. PascalCase & camelCase & kebabCase

    帕斯卡拼写法( 也叫大骆驼拼写法),一种计算机编程中的变量命名方法.它主要的特点是将描述变量作用所有单词的首字母大写,然后直接连接起来,单词之间没有连接符.比如: Age LastName Winte ...

  4. python mqtt 客户端实现

    安装paho-mqtt pip install paho-mqtt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com py ...

  5. js 动态绑定解绑事件

    function addEvent(obj, type, handle) { if (obj.addEventListener) { obj.addEventListener(type, handle ...

  6. JQuery通过URL获取图片宽高

    var img_url ='https://www.baidu.com/img/bd_logo1.png'; // 创建对象 var img = new Image(); // 改变图片的src im ...

  7. css实现下拉框导航条

    html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...

  8. 第07章 JdbcTemplate

    第07章JdbcTemplate 1. 概述 为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架. 作为Spring JDBC框架的核心,JDB ...

  9. 木棍加工(dp,两个参数的导弹拦截问题)

    题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的:     第一根棍子的准备时间为1分钟:   ...

  10. 《NULL-2019团队》第一次作业:OUC二手交易平台

    前言 项目名称:OUC二手交易平台 项目简介:针对在校大学生的二手交易平台,相对于现在市面已有的二手APP,将其使用的普遍性范围缩小,针对在校大学生,这样可以有效的保证交易的真实性和公平性.   NA ...