面试官问JavaScript的forEach、map、filter的区别了解吗

最近面了字节,这个问题直接把我问的怀疑人生。所以简单总结下,以备日后。
面试官问:js的数组有几个方法,forEach、map、filter,它们有什区别?
我:刚开始回答说map和filter必须要有返回值,forEach可以没有。
面试官问:那如果我一定要在forEach中return什么呢,会怎么样?
我:(直接虚了)磕磕巴巴的说,应该不会怎么样吧[~泪崩]。
面试官笑了问:行,那我换个问法,你能说一下下面arr和newArr执行后的值吗?

let arr = [1, 4, 6, 2];
let newArr1 = arr.filter(item=>  item < 2) // 不改变原数组 arr不变 但newArr=[1]
let newArr2 = arr.forEach(item=>item < 2) // arr 不变  newArr= undefined
let newArr3 = arr.map(item=>item < 2) // arr 不变 newArr=[ true, false, false, false ]

我:(当时脑子一片空白,浑然忘了他们平时用的时候都返回数组,心想着里面肯定有坑,我不能上当,嗯,一定是这样的)抠了半天最后写了个filter返回1 map返回[1],(现在想来后悔啊,还不如当时直接说不清楚…言多比失)

1. forEach

  • 可以改变数组自身,没有返回值;
  • 中途不能用常规操作跳出循环,可以用抛出异常(try/catch)的方式,但不推荐这样做;
  • 不支持链式操作

2. map

forEach的一些局限性它很多都能解决。map即映射,也就是原数组被映射成对应新数组

  • 返回一个新数组,原始数组在调用它后不会发生变化;
  • 该数组中的每个元素都调用一个提供的函数,后返回结果。map中每个元素都要执行相应的回调函数,所以必须要有return

3.filter

  • 返回一个新数组,原始数组在调用它后不会发生变化;
  • map没法做到的过滤,就交给filter去完成
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值