0%

数组方法哪些有副作用,一目了然!

作者:李旭光
引用请标明出处

前言

今天一个小兄弟微信给我发了个消息,说是今天面试,面试官问了个比较基础的问题,没答好,我就问他问了什么,他说,数组有哪些方法会改变原来的值,他说他就说了3、4个,还不确定对不对,我想了想说其实列个表就很容易记住了,于是便有了下面这个表格。

关于数组的那些方法

其实上面的问题:

数组有哪些方法会改变原来的值

现在有个词挺火的,叫做纯函数,什么是纯函数呢,就是没有副作用,什么是没有副作用呢,就是结果是幂等的,等等….怎么越来越绕,简单来说,就是这个函数干几次都是一样的结果,出了函数就不会有任何影响,他就像一台加工机器,输入原料,输出产品,没有任何其他输出材料,比如废气之类影响大气的东西。好吧,你不明白也没关系,反正我对上面这个问题的理解就变成了

数组的哪些方法是没有副作用的。

要说有哪些方法是有副作用,首先你得知道有哪些方法,

比如,push,pop,shift,unshift,splice 这些别跟我说你不知道,这些都是常用的数组操作,出栈入栈,
还有什么呢,数组的排序啊,比如sort,reverse,还有一个用的不多,fill是用一个固定值填充数组的起始元素到终止元素,这些呢都是在原数组上进行操作,所以肯定是影响数组的值的,也就是说有副作用的。

那么哪些没有副作用呢,简单说其他的都没有,
啥!?,是的,其他的都没有。。。所以记得上面这些就好了呀,怎么样,是不简单。

那还剩下啥?

  • concat 返回的是心数组,
  • join 返回的是字符串,
  • indexOf和lastIndexOf返回的是索引,
  • slice 返回的是切割后的新数组,别把它和splice混淆了哈,
  • entries 返回一个新的Array Iterator对象,
  • keys 返回一个新的包含全部Array索引的 Iterator对象,
  • values 有keys就有values,返回一个新的包含全部Array值的 Iterator对象,
  • every、some、includes 返回 布尔值,
  • filter,map 返回新数组,
  • reducer 有点神奇 返回累加值,
  • find、findIndex 找元素 一个返回第一个符合的元素本身,一个返回他的索引,
  • 最后还有个flat,展平了数组,
  • forEach 遍历数组, 这么一数起来,方法还真不少呢!

总结

想要记住所有的方法呢,不下点功夫是不行的,但是想要记住有副作用的,然后排除掉他们的话,还是容易的,最后做个表,方便直观的来看。

方法 作用 返回结果 有无副作用
push 数组尾部插入元素 改变了的原数组 有
pop 数组尾部删除元素 改变了的原数组 有
shift 数组头部插入元素 改变了的原数组 有
unshift 数组头部删除元素 改变了的原数组 有
splice 增删改数组 改变了的原数组 有
sort 数组排序 改变了的原数组 有
reverse 数组反序 改变了的原数组 有
fill 填充数组 改变了的原数组 有
concat 连结数组 合并的新数组 无
join 合并数组为字符串 字符串 无
indexOf 查索引 第一个索引 无
lastIndexOf 查索引 最后一个索引 无
slice 截取数组 截取的新数组 无
entries 迭代数组 迭代器对象 无
keys 迭代数组的key 全部的key 无
values 迭代数组的value 全部的value 无
every 每个都满足 布尔值 无
some 有一些满足 布尔值 无
includes 包含某元素 布尔值 无
filter 过滤数组 新数组 无
map 加工数组 新数组 无
reducer 迭代数组 累加值 无
find 查找元素 第一个元素或undifined 无
findIndex 查找元素 第一个元素的index 无
flat 展平数组 新数组 无
forEach 遍历数组 void 无

就到这里,怎么样,清楚了吧。

如果觉得不错请支持作者
------ 版权声明 ------

本文标题:数组方法哪些有副作用,一目了然!

文章作者:

发布时间:2022年03月11日 - 07:00

最后更新:2023年09月20日 - 10:25

原始链接:https://blog.lifesli.com/2022/03/11/%E6%95%B0%E7%BB%84%E6%96%B9%E6%B3%95%E4%B8%80%E7%9B%AE%E4%BA%86%E7%84%B6/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。