在前端面试中,如果面试官问你你知道数组身上有哪些方法吗,你肯定会心中一喜,嘿嘿,这个我熟,但是最后却发现自己怎么也答不全,其实不是你没有学会,而是你回答的方法有问题,数组的方法很多,你要学会分类答,这样才会有逻辑,从而做到一丝不漏。
我们首先来说增
🐟增
数组中的增也有很多种,我们分为两类,一类是会改变原数组,一类是不会改变原数组
会改变原数组
push()
push()方法将一个或多个元素添加到数组的末尾。它通过增加数组的长度来修改原始数组。
let myArray = [1, 2, 3];
myArray.push(4);
console.log(myArray); // [1, 2, 3, 4]
myArray.push(5, 6);
console.log(myArray); // [1, 2, 3, 4, 5, 6]
unshift()
unshift()方法将一个或多个元素添加到数组的开头。与push()类似,它也会修改原始数组,但它影响的是数组的起始位置而不是末尾
let myArray = [2, 3, 4];
myArray.unshift(1);
console.log(myArray); // [1, 2, 3, 4]
myArray.unshift(-1, 0);
console.log(myArray); // [-1, 0, 1, 2, 3, 4]
splice()
splice()方法用于修改数组,他既可以增添原数组中的元素,也可以删除,这个我们后面会讲到,我们首先来讲到他的增添,他会改变原数组。
-
语法:
array.splice(start[, deleteCount[, item1[, item2[,...]]]])start:指定修改的开始位置(索引)。如果是负数,则从数组末尾开始计算,例如 -1 表示最后一个元素。deleteCount(可选):要删除的元素数量。如果省略或其值大于从start开始到数组末尾的元素数量,则会删除从start开始到数组末尾的所有元素。如果值为 0,则不删除任何元素。item1, item2,...(可选):要添加到数组中的元素,从start位置开始插入。
let array = [1, 2, 3];
array.splice(3, 0, 'new');
console.log(array); // [1, 2, 3, 'new']
不会改变原数组
concat()
concat()方法用于合并两个或多个数组,它不会改变原始数组,而是返回一个新的合并后的数组。
- 语法:
var new_array = old_array.concat(array1[, array2[,...[, arrayN]]])
let array1 = [1, 2, 3];
let array2 = [4, 5];
let newArray = array1.concat(array2);
console.log(newArray); // [1, 2, 3, 4, 5]
console.log(array1); // [1, 2, 3] (原始数组未改变)
🐟删
我们还是分为两类,会改变原数组,不会改变原数组。
会改变原数组
pop()
pop()方法用于从数组中删除最后一个元素,并返回被删除的那个元素。此操作会直接修改原数组。
// 定义一个数组
let myArray = [10, 20, 30, 40];
// 使用pop()方法
let removedElement = myArray.pop();
console.log("被删除的元素:", removedElement); // 输出: 40
console.log("修改后的数组:", myArray); // 输出: [10, 20, 30]
shift()
shift()是 JavaScript 中的一个数组方法。它的主要功能是从数组的开头(索引为 0 的位置)删除一个元素,并返回被删除的元素。这个操作会直接修改原始数组,使数组的长度减 1。
let array = [1, 2, 3];
let removedElement = array.shift();
console.log(removedElement); // 1
console.log(array); // [2, 3]
splice()
splice()方法用于修改数组,这里是删除原数组身上的元素
-
语法:
array.splice(start[, deleteCount[, item1[, item2[,...]]]])start:指定修改的开始位置(索引)。如果是负数,则从数组末尾开始计算,例如 -1 表示最后一个元素。deleteCount(可选):要删除的元素数量。如果省略或其值大于从start开始到数组末尾的元素数量,则会删除从start开始到数组末尾的所有元素。如果值为 0,则不删除任何元素。item1, item2,...(可选):要添加到数组中的元素,从start位置开始插入。
let array = [1, 2, 3, 4, 5];
array.splice(2, 2);
console.log(array); // [1, 2, 5]
不会改变原数组
slice()
-
语法:
array.slice(start, end)-
参数:
start(可选):提取起始位置的索引。如果是负数,则从数组末尾开始计算(例如 -2 表示从倒数第 2 个元素开始)。如果省略,则从 0 开始。end(可选):提取终止位置的索引(不包括该索引对应的元素)。如果是负数,则从数组末尾开始计算。如果省略,则提取到数组末尾。
-
功能:返回一个新的数组,包含从
start到end(不包括end)所选取的元素。这个方法不会改变原数组。
-
let array = [1, 2, 3, 4, 5];
// 从索引2开始提取到末尾
let newArray1 = array.slice(2);
console.log(newArray1); // [3, 4, 5]
// 从索引1开始到索引3(不包括3)
let newArray2 = array.slice(1, 3);
console.log(newArray2); // [2, 3]
// 从倒数第3个元素开始到末尾
let newArray3 = array.slice(-3);
console.log(newArray3); // [3, 4, 5]
🐟查找
-
includes()-
功能:用于判断一个数组或字符串是否包含指定的值,返回
true或false。 -
语法 :
arr.includes(valueToFind[, fromIndex])。fromIndex可选,表示开始查找的索引位置,默认为 0。 -
示例 :
-
let array = [1, 2, 3, 4];
console.log(array.includes(3)); // true
console.log(array.includes(5)); // false
console.log(array.includes(2, 2)); // false,从索引2开始查找,找不到2
2. indexOf()
* **功能**:返回在数组中可以找到给定元素的第一个索引,如果不存在,则返回 -1。
* **语法** :`arr.indexOf(searchElement[, fromIndex])`。`fromIndex`可选,从该索引处开始查找,默认为 0。
* **示例** :
let array = [1, 2, 3, 2];
console.log(array.indexOf(2)); // 1,第一次出现2的索引
console.log(array.indexOf(2, 2)); // 3,从索引2开始查找2的索引
3. lastIndexOf()
* **功能**:返回指定元素在数组或字符串中最后一次出现的索引,如果不存在,则返回 -1。与`indexOf`相反,是从后往前找。
* **语法** :`arr.lastIndexOf(searchElement[, fromIndex])`。`fromIndex`可选,默认为数组长度 - 1,从该索引往前找。
* **示例** :
let array = [1, 2, 3, 2];
console.log(array.lastIndexOf(2)); // 3,最后一次出现2的索引
4. find()
* **功能**:返回数组中满足提供的测试函数的第一个元素的值。如果没有找到,则返回`undefined`。
* **语法**:`arr.find(callback(element[, index[, array]])[, thisArg])`。`callback`是一个函数,用于测试每个元素,`thisArg`可选,用于绑定`callback`中的`this`。
* **示例**:
let array = [1, 2, 3, 4];
let result = array.find((element) => element > 2);
console.log(result); // 3
5. findLast()
* **功能**:返回数组中满足提供的测试函数的最后一个元素的值。如果没有找到,则返回`undefined`。这是 ES2023 新特性。
* **语法**:`arr.findLast(callback(element[, index[, array]])[, thisArg])`。
* **示例**:
let array = [1, 2, 3, 4, 3];
let result = array.findLast((element) => element > 2);
console.log(result); // 4
6. findIndex()
* **功能**:返回数组中满足提供的测试函数的第一个元素的索引。如果没有找到,则返回 -1。
* **语法**:`arr.findIndex(callback(element[, index[, array]])[, thisArg])`。
* **示例**:
let array = [1, 2, 3, 4];
let index = array.findIndex((element) => element > 2);
console.log(index); // 2
7. findLastIndex()
* **功能**:返回数组中满足提供的测试函数的最后一个元素的索引。如果没有找到,则返回 -1。这是 ES2023 新特性。
* **语法**:`arr.findLastIndex(callback(element[, index[, array]])[, thisArg])`。
* **示例**:
let array = [1, 2, 3, 4, 3];
let index = array.findLastIndex((element) => element > 2);
console.log(index); // 4
8. some()
* **功能**:测试数组中是否至少有一个元素通过了指定函数的测试,返回`true`或`false`。
* **语法**:`arr.some(callback(element[, index[, array]])[, thisArg])`。
* **示例**:
let array = [1, 2, 3, 4];
let hasEven = array.some((element) => element % 2 === 0);
console.log(hasEven); // true
9. every()
* **功能**:测试数组中所有元素是否都通过了指定函数的测试,返回`true`或`false`。
* **语法**:`arr.every(callback(element[, index[, array]])[, thisArg])`。
* **示例**:
let array = [2, 4, 6];
let allEven = array.every((element) => element % 2 === 0);
console.log(allEven); // true
🐟转换
记住 toReversed() 和 toSorted() 返回到新数组中,不改变原数组。 reverse() 和 sorted() 是改变原数组
-
reverse()-
功能:将数组中元素的位置颠倒,并返回该数组。原数组被修改。
-
语法:
arr.reverse()。 -
示例:
-
let array = [1, 2, 3];
let reversedArray = array.reverse();
console.log(reversedArray); // [3, 2, 1]
console.log(array); // [3, 2, 1],原数组改变
2. sort()
* **功能**:对数组的元素进行排序,并返回排序后的数组。原数组被修改。默认排序顺序是根据字符串 Unicode 码点。
* **语法**:`arr.sort([compareFunction])`。`compareFunction`可选,用于定义排序规则。
* **示例(默认排序)** :
let array = [3, 1, 2];
let sortedArray = array.sort();
console.log(sortedArray); // [1, 2, 3]
console.log(array); // [1, 2, 3]
- 示例(自定义排序) :
let array = [3, 1, 2];
let sortedArray = array.sort((a, b) => a - b);
console.log(sortedArray); // [1, 2, 3]
3. toReversed()
* **功能**:返回一个新的数组,其元素顺序与原数组相反。原数组不变,这是 ES2023 新特性。
* **语法**:`arr.toReversed()`。
* **示例**:
let array = [1, 2, 3];
let reversedArray = array.toReversed();
console.log(reversedArray); // [3, 2, 1]
console.log(array); // [1, 2, 3]
4. toString()
* **功能**:将数组转换为字符串,并返回结果。数组的每个元素都会被转换为字符串,并用逗号分隔。
* **语法**:`arr.toString()`。
* **示例**:
let array = [1, 2, 3];
console.log(array.toString()); // "1,2,3"
5. join()
* **功能**:将数组的所有元素连接成一个字符串。可以指定分隔符,默认为逗号。
* **语法**:`arr.join([separator])`。
* **示例**:
let array = [1, 2, 3];
console.log(array.join('-')); // "1-2-3"
6. toSorted()
* **功能**:返回一个新的已排序数组,原数组不变,这是 ES2023 新特性。
* **语法**:`arr.toSorted([compareFunction])`。
* **示例**:
let array = [3, 1, 2];
let sortedArray = array.toSorted();
console.log(sortedArray); // [1, 2, 3]
console.log(array); // [3, 1, 2]
🐟迭代
-
forEach()- 功能:对数组的每个元素执行一次给定的函数。它没有返回值,主要用于遍历数组并执行副作用操作。
- 语法:
arr.forEach(callback(currentValue[, index[, array]])[, thisArg])。 - 示例:
let array = [1, 2, 3];
array.forEach((element) => console.log(element));
// 1
// 2
// 3
2. map()
* **功能**:创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
* **语法**:`arr.map(callback(currentValue[, index[, array]])[, thisArg])`。
* **示例**:
let array = [1, 2, 3];
let newArray = array.map((element) => element * 2);
console.log(newArray); // [2, 4, 6]
3. filter()
* **功能**:创建一个新数组,其元素是通过检查指定数组中符合条件的所有元素。
* **语法**:`arr.filter(callback(element[, index[, array]])[, thisArg])`。
* **示例**:
let array = [1, 2, 3, 4];
let evenArray = array.filter((element) => element % 2 === 0);
console.log(evenArray); // [2, 4]
🐟END
现在我们就可以分类来回答的,保证你的记忆效率翻倍!
- 增:push,unshift,splice,concat
- 删:pop ,shift,slice,splice
- 查:includes,indexOf,LastIndexOf,find,findLast,findIndex,findLastIndex,some,every
- 转换:reverse,sort,toReversed,toString,join,toSorted
- 迭代:foreach,map,filter