前端面试篇之JS数组(一)

前面已经总结完了一些常见的css常考知识点,现在来总结一下js的内容

js数组上有哪些方法?

像这样的题目一看,感觉没什么难度脑海里已经蹦出来很多js数组身上的方法。但是当你真的去说出来的话,80%可能就说不全了。所以回答这样的问题就得有个方法,先总再分。

先将列出功能分为增删改查、转换、遍历迭代,然后我们再细化每种功能下有哪些方法。

增加元素

push()

向数组末尾添加一个或多个元素,并返回新的长度。

javascript 复制代码
let arr = [1, 2];
arr.push(3);
console.log(arr); // 输出 [1, 2, 3]

unshift()

向数组开头添加一个或多个元素,并返回新的长度。

javascript 复制代码
let arr = [1, 2];
arr.unshift(0);
console.log(arr); // 输出 [0, 1, 2]

splice()

可以用于插入、删除和替换元素。

javascript 复制代码
let arr = [1, 2, 3];
arr.splice(1, 0, 'a'); // 在索引1前插入'a'
console.log(arr); // 输出 [1, 'a', 2, 3]

concat()

连接两个或更多的数组,并返回结果。

javascript 复制代码
let arr1 = [1, 2];
let arr2 = [3, 4];
let arr3 = arr1.concat(arr2);
console.log(arr3); // 输出 [1, 2, 3, 4]

删除元素

pop()

删除并返回数组的最后一个元素。

javascript 复制代码
let arr = [1, 2, 3];
let last = arr.pop();
console.log(last); // 输出 3
console.log(arr); // 输出 [1, 2]

shift()

删除并返回数组的第一个元素。

javascript 复制代码
let arr = [1, 2, 3];
let first = arr.shift();
console.log(first); // 输出 1
console.log(arr); // 输出 [2, 3]

splice()

用于删除元素,还可以用于插入和替换。

javascript 复制代码
let arr = [1, 2, 3, 4];
arr.splice(1, 2); // 删除索引1开始的2个元素
console.log(arr); // 输出 [1, 4]

slice()

不会修改原数组,而是返回一个新数组,包括从开始到结束(但不包括结束)的数组的一部分浅拷贝。

javascript 复制代码
let arr = [1, 2, 3, 4];
let newArr = arr.slice(1, 3);
console.log(newArr); // 输出 [2, 3]

修改元素

splice()

可以用于替换元素。

javascript 复制代码
let arr = [1, 2, 3];
arr.splice(1, 1, 'a');
console.log(arr); // 输出 [1, 'a', 3]

fill()

用给定的静态值填充数组的一部分或全部。

javascript 复制代码
let arr = [1, 2, 3, 4, 5];
arr.fill(0, 1, 3); // 从索引1开始到索引3(不包括)用0填充
console.log(arr); // 输出 [1, 0, 0, 4, 5]

查询元素

includes()

检查数组中是否包含特定的元素,返回布尔值。

javascript 复制代码
let arr = [1, 2, 3];
let hasTwo = arr.includes(2);
console.log(hasTwo); // 输出 true

indexOf()

返回数组中第一个匹配指定值的元素的索引,如果没有找到则返回-1。

javascript 复制代码
let arr = [1, 2, 3];
let index = arr.indexOf(2);
console.log(index); // 输出 1

lastIndexOf()

类似于 indexOf(),但是是从数组的末尾向前查找。

javascript 复制代码
let arr = ['apple', 'banana', 'cherry', 'banana'];
console.log(arr.lastIndexOf('banana')); // 输出 3
console.log(arr.lastIndexOf('kiwi')); // 输出 -1

find()

返回通过测试的数组中的第一个元素的值,否则返回 undefined。

javascript 复制代码
let arr = [{id: 1}, {id: 2}];
let found = arr.find(item => item.id === 2);
console.log(found); // 输出 {id: 2}

findIndex()

返回通过测试的数组中的第一个元素的索引位置,否则返回 -1。

javascript 复制代码
let arr = [1, 2, 3];
let index = arr.findIndex(x => x > 1);
console.log(index); // 输出 1

findLast()

ES2022 引入,返回从后往前查找的数组中第一个匹配条件的元素,否则返回 undefined

javascript 复制代码
let arr = [1, 2, 3, 4, 3];
let result = arr.findLast(item => item === 3);
console.log(result); // 输出 4

findLastIndex()

ES2022 引入,返回从后往前查找的数组中第一个匹配条件的元素的索引,否则返回 -1

javascript 复制代码
let arr = [1, 2, 3, 4, 3];
let index = arr.findLastIndex(item => item === 3);
console.log(index); // 输出 4

转换数组

reverse()

反转数组中元素的顺序。

javascript 复制代码
let arr = [1, 2, 3];
arr.reverse();
console.log(arr); // 输出 [3, 2, 1]

toReversed()

ES2022引入的方法,返回一个新的反转后的数组副本。

javascript 复制代码
let arr = [1, 2, 3];
let reversed = arr.toReversed();
console.log(reversed); // 输出 [3, 2, 1]

sort()

对数组的元素进行排序。

javascript 复制代码
let arr = [3, 1, 2];
arr.sort((a, b) => a - b);
console.log(arr); // 输出 [1, 2, 3]

toSorted()

ES2022引入的方法,返回一个新的排序后的数组副本。

javascript 复制代码
let arr = [3, 1, 2];
let sorted = arr.toSorted();
console.log(sorted); // 输出 [1, 2, 3]

toString()

将数组转换为字符串,元素之间用逗号分隔。

javascript 复制代码
let arr = [1, 2, 3];
let str = arr.toString();
console.log(str); // 输出 "1,2,3"

join()

将数组的所有元素放入一个字符串,并通过指定的分隔符分隔数组的每个元素。

javascript 复制代码
let arr = [1, 2, 3];
let str = arr.join('-');
console.log(str); // 输出 "1-2-3"

迭代元素

forEach()

遍历数组中的每个元素。

javascript 复制代码
let arr = [1, 2, 3];
arr.forEach(item => console.log(item));
// 输出
// 1
// 2
// 3

map()

创建一个新数组,其结果是调用数组中的每个元素上的函数。

javascript 复制代码
let arr = [1, 2, 3];
let newArr = arr.map(item => item * 2);
console.log(newArr); // 输出 [2, 4, 6]

filter()

创建一个新数组,其包含通过所提供函数实现的测试的所有元素。

javascript 复制代码
let arr = [1, 2, 3, 4];
let even = arr.filter(item => item % 2 === 0);
console.log(even); // 输出 [2, 4]

reduce()

对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。

javascript 复制代码
let arr = [1, 2, 3, 4];
let sum = arr.reduce((acc, cur) => acc + cur, 0);
console.log(sum); // 输出 10

讲到迭代这里可能面试官会问一下forEach、map、filter有什么区别吗。这里我简单总结一下:

  • forEach() 更适合用于执行副作用,如打印日志、修改全局变量等,不生成新数组。
  • map() 用于创建新数组,数组中的元素是原数组元素经过某种转换后的结果。
  • filter() 用于创建新数组,数组中的元素是原数组中符合条件的元素。
相关推荐
qq_390161777 分钟前
防抖函数--应用场景及示例
前端·javascript
3345543235 分钟前
element动态表头合并表格
开发语言·javascript·ecmascript
John.liu_Test37 分钟前
js下载excel示例demo
前端·javascript·excel
Yaml41 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
PleaSure乐事1 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
哟哟耶耶1 小时前
js-将JavaScript对象或值转换为JSON字符串 JSON.stringify(this.SelectDataListCourse)
前端·javascript·json
getaxiosluo1 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v1 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
知孤云出岫1 小时前
web 渗透学习指南——初学者防入狱篇
前端·网络安全·渗透·web
贩卖纯净水.1 小时前
Chrome调试工具(查看CSS属性)
前端·chrome