for...in和for...of循环以及forEach方法

一、循环

1、for...in循环:可以把一个对象的所有属性依次循环出来。

var o ={
     name:"jack",
     age:20,
     city:"beijing"
};
for (var key in o){
      alert(key)  //"name","age","city"
} 

由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,forj...in循环可以直接循环出Array的索引。

var a =["A","B","C"];
for (var i in a){
    alert(i);       //"0","1","2"
    alert(a[i]);   //"A","B","C"
}

总结:for...in循环的是对象的属性;所以便利数组得到的是索引而不是值;所以要遍历数组,可以采用下标循环。

for...in对Array的循环得到的是String而不是Number。

2、for...of循环:ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型;

具有iterable类型的集合可以通过for...of循环来遍历;

只循环集合本身的元素。

用for...of循环遍历集合,用法如下:

var a = ["A","B","C"];
var s = new Set(["A","B","C"]);
var m = new Map([[1,"x"],[2,"y"],[3,"z"]]);
for (var x of a){
     alert(x);
}
for (var x of s){
     alert(x);
}
for (var x of m){
     alert(x[0]+"="+x[1]);
}

更好的方式是使用iterable内置的forEach方法。它接收一个函数,每次迭代就自动回调该函数。

以Array为例

var a =["A","B","C"];
a.forEach(function(element,index,array)){
       //element:指向当前元素的值
       //index:指向当前元素索引
       //array:指向Aaary对象本身
       alert(element);
} 

Set与Array类似,但Set没有索引,因此回调函数的前两个参数都是元素本身;

Map的回调函数参数依次是value、key和map本身。

二、rest参数

ES6引入了rest参数。看下面函数:

function foo(a,b,...rest){
     console.log("a="+a);
     console.log("b="+b);
     console.log(rest);
}

foo(1,2,3,4,5);
//结果
//a=1
//b=2
//Array[3,4,5]

foo(1)
//结果
//a=1
//b=undefined
//Array[]

rest参数只能写在最后,前面用...标识。从运行结果可知,传入的参数先绑定a、b,多余的参数以数组形式交给变量rest。

如果传入的参数连正常定义的参数都没有填满,rest参数会接收一个空数组(注意不是undefined)。

三、求和sum()函数

1、用rest参数和for...of循环    

function sum(...rest){
     var result=0;
     if (rest.length==0){
            return 0;
     }
     for (var i of rest){
           result+=i;
     }
     return result;
} 

2、for 循环

function sum(...rest){
      var result=0;
      if (rest.length==0){
          result=0;
      }
      for (var i=0;i<rest.length;i++){
              result+=rest[i];
      }
      return result;
}

3、用iterable类型的forEach方法

function sum(...rest){
     var result = 0;
     if(rest.length==0){
           result=0;
     }
     rest.forEach(function(element){
           result+=element;
     })
     return result;
}
时间: 2024-11-10 07:28:41

for...in和for...of循环以及forEach方法的相关文章

for循环,forin循环和Array.every(),obj.forEach()方法运行速度对比

for循环和forin循环是ES3中的数组和对象迭代方法,在ES5中加入了原生方法Array.every()和object.forEach()方法来迭代,下面的例子用来比较两种方式的运行速度. 注意:IE不兼容. /** * Created by Administrator on 2016/12/22. * for()循环和Array.every()方法运行速度 */ var Arr=[5,6,12,23,0,11,"wasd",'on',34,22,111,8,9,89,'off',

二维数组遍历的方式(for普通循环和foreach循环)

package com.Summer_0421.cn; /** * @author Summer * 二维数组遍历的方式for普通循环和foreach循环 */ public class Test03 { public static void main(String[] args) { show1(); show2(); } private static void show2() { int[][] its = new int[][]{{1},{1,2},{1,2,3},{1,2,3,4}};

for循环,foreach, map,reduce用法对比+for in,for of

for不做赘述,相当简单: foreach方法: forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数. 注意: forEach() 对于空数组是不会执行回调函数的. array.forEach(function(currentValue, index, arr), thisValue) map() : map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值. map() 方法按照原始数组元素顺序依次处理元素. 注意: map() 不会对空数组进行检测.

js数组的map与forEach方法的区别及兼容性用法

高级浏览器(包括ie9以上)支持map和forEach方法对数组循环遍历,用法基本相同,但有些区别必须知道,才能在项目中正确选择 原理: 高级浏览器支持forEach方法语法:forEach和map都支持2个参数:一个是回调函数(item,index,list)和上下文: forEach:用来遍历数组中的每一项:这个方法执行是没有返回值的,对原来数组也没有影响: 数组中有几项,那么传递进去的匿名回调函数就需要执行几次: 每一次执行匿名函数的时候,还给其传递了三个参数值:数组中的当前项item,当

如何进行字符串循环替换的方法?

答案:比如提取了HTML代码中的所有图片,现在要进行批量替换过去改如何操作呢?遍历提取出来的那个数组,得到一个tmp:然后将tmp在赋值给strContent; foreach (var item in arr) { dr = dt.NewRow(); string ext = CommonSpace.Conmmon.GetExt(item); string newName = i + ext; tmp = strContent.Replace(item, newName);//替换得到一个结果

forEach方法

forEach 方法按升序为数组中含有效值的每一项执行一次callback 函数,那些已删除或者未初始化的项将被跳过(例如在稀疏数组上). callback 函数会被依次传入三个参数: 数组当前项的值 数组当前项的索引 数组对象本身 如果给forEach传递了thisArg参数,当调用时,它将被传给callback 函数,作为它的this值.否则,将会传入 undefined 作为它的this值.callback函数最终可观察到this值,这取决于 函数观察到this的常用规则. 示例 for 

数组方法的扩展,如map,reduce,fliter,forEach方法

map方法 该方法可以看为映射关系 let arr = [1,2,3,4,4,6,7] let result = arr.map(item => item*3 ) console.log(result) // 具体例子 let score = [50,54,60,70] let rank = score.map(item => item>=60?'合格':'不合格') console.log(rank) reduce 方法 // 数组中的reduce方法 可以看成汇总 let arr =

数组遍历 forEach 方法

数组的遍历 遍历数组,将数组中的所有元素都取出来. 使用for 循环执行数组的索引(length-1)相同的次数. var arr=["1", "5", "10", "25", "40", "1000"]; for(var i=0;i<arr.length;i++){ console.log(arr[i]); } 除了常见的使用for循环去遍历数组,JS中还为我们提供了一个方法,用

js中有哪些是循环遍历的方法?

1 each方法 jquery的方法,不能使用break打断循环,return falsed代表for循环中的break obj.each(function (i,item) { // i:循环的下标 // item:循环的节点 // $(this):jquery对象 // $(item):获得要循环的div的单个jquery对象 }) $.each(obj,function (i,item) { // i:下标 // item:循环的节点对象 // $(this):jquery对象 // $(