最近在面试别人的过程中,发现了一些在针对数组这块了解还不是很透彻的问题,所以做了如下汇总,希望对大家有一点点用。
在 ES6、ES7 和 ES8 中,数组方法可以分为两类:会改变原数组的方法和不会改变原数组的方法。理解和记忆这些方法的关键在于看它们的用途以及它们是如何作用于数组元素的。
一、不会改变原数组的方法
这些方法返回的是一个新数组或结果,并不会对原数组产生任何更改。常见的有:
- map:遍历数组中的每个元素,生成一个新的数组。
- filter:根据条件筛选出符合条件的元素,生成一个新的数组。
- concat:连接两个或多个数组,生成一个新的数组。
- slice:截取数组的一部分,生成一个新的数组。
- reduce 和 reduceRight:逐个处理数组元素,返回一个单独的计算结果(可以是任何数据类型)。
- find 和 findIndex:查找符合条件的元素或索引,返回结果(单个元素或索引,而不是数组)。
- every 和 some:检查数组元素是否满足条件,返回布尔值。
- includes:检查数组是否包含某个元素,返回布尔值。
- join:将数组元素转为字符串,不改变数组。
- keys、values、entries:用于遍历数组,返回的是迭代器,不会改变原数组。
二、会改变原数组的方法
这些方法通常是直接在原数组上进行操作,导致数组内容发生变化。常见的有:
- push:向数组末尾添加一个或多个元素。
- pop:删除数组的最后一个元素。
- shift:删除数组的第一个元素。
- unshift:在数组的开头添加一个或多个元素。
- splice:可以删除、替换或添加元素,会改变数组长度。
- sort:对数组元素进行排序。
- reverse:将数组元素顺序反转。
- fill:用指定值填充数组的元素。
三、理解和记忆的小技巧
- 看名字:某些方法(如
push、pop、shift、unshift)是直接描述“增删操作”的,所以它们自然会改变数组。 - 区分“生成新内容” vs “操作原内容”:生成新数组的函数通常不会改变原数组;而如果操作是为了直接修改数组,通常会改变原数组。
- 以“返回值”来判断:
- 如果返回的是新数组或值,则不会改变原数组(如
map、filter)。 - 如果返回
undefined或改变了原数组的引用,则会改变原数组(如sort、splice)。
- 如果返回的是新数组或值,则不会改变原数组(如
- 减少记忆负担:先记住那些会改变数组的方法,因为数量较少且常用于修改数组。