js中有哪些遍历方法

for是编程式

for(let i=0;i<arr.length;i++){
    console.log(arr[i]);
}

forEach和map

看一看MDN上对Map和ForEach的定义:
forEach(): 针对每一个元素执行提供的函数。
map(): 创建一个新的数组,其中每一个元素由调用数组中的每一个元素执行提供的函数得来。
共同点:
1.都是循环遍历数组中的每一项。
2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input。
3.匿名函数中的this都是指Window。
4.只能遍历数组。
核心要点
1.map()会分配内存空间存储新数组并返回,forEach()不会返回数据
2.forEach()允许callback更改原始数组的元素。map()返回新的数组

let arr = [1, 2, 3, 4, 5];
let doubled=arr.forEach((num, index) => {
    return arr[index] = num * 2;
});
console.log(doubled);//undefined
console.log(arr);// [2, 4, 6, 8, 10]
let arr = [1, 2, 3, 4, 5];
let doubled=arr.map((num, index) => {
    return arr[index] = num * 2;
});
console.log(doubled);// [2, 4, 6, 8, 10]
console.log(arr);// [2, 4, 6, 8, 10]

map()的执行速度比forEach()快,jsPref是一个非常好的网站用来比较不同的JavaScript函数的执行速度。
在这里插入图片描述
forEach适合于你并不打算改变数据的时候,而只是想用数据做一些事情 – 比如存入数据库或则打印出来。
map()适用于你要改变数据值的时候。不仅仅在于它更快,而且返回一个新的数组。这样的优点在于你可以使用复合(composition)(map(), filter(), reduce()等组合使用)来玩出更多的花样。
注意:不管是forEach还是map在IE6-8下都不兼容(不兼容的情况下在Array.prototype上没有这两个方法),那么需要我们自己封装一个都兼容的方法,代码如下:

for in

1.key会变成字符串(String)类型。
2.包括数组的私有属性也可以打印出来,即循环不仅会遍历数组元素,还会遍历任意其他自定义添加的属性,如,arr上包含自定义属性,arr.b,那这次循环中也会出现此b属性。

let arr=[1,2,3,4,5];
    arr.b='100';
    for(let key in arr){
    	debugger
    console.log(key);
}

for of

  1. 可以避免所有 for-in 循环的陷阱
  2. 不同于 forEach(),可以使用 break, continue 和 return
  3. 它也支持字符串的遍历 ,for-of 并不适用于处理原有的原生对象(不能遍历对象)
for(let val of arr){
    console.log(val);
}

filter

	let arr=[1,2,3,4,5];
    console.log(arr.filter(x=>x))

every()与some()方法都是JS中数组的迭代方法。

共同点
1.遍历数组;
2. 三个参数分别是item,index,arr(数组具体项,位置,数字本身);
3.返回的都是布尔值;
区别
1.every()方法,遍历数组每一项,若全部为true,则返回true;
在这里插入图片描述
2.some()方法,遍历数组的每一项,若其中一项为 true,则返回true;
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值