作者:李旭光
引用请标明出处
前言
今天一个小兄弟微信给我发了个消息,说是今天面试,面试官问了个比较基础的问题,没答好,我就问他问了什么,他说,数组有哪些方法会改变原来的值,他说他就说了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 | 无 |
就到这里,怎么样,清楚了吧。