面试中反复问到数组相关的操作,故做此篇当复习
ps:当初学的时候比较急,js基础这有些欠缺,一问就不行,苦涩~~
以下将结合面试题总结一下数组的基本操作,相信如果你和我一样,看完会有帮助
面试官:如何遍历数组找到与之匹配的id,并且拿到其中的项
1.首先我们得知道有几种遍历数组的方式
- 无脑循环遍历:for循环、while循环(包含for... in 等)
- 使用数组方法:
- 遍历数组的方法
| 方法名 | 作用 |
|---|---|
| forEach | 遍历数组,对数组中的每个元素执行一次提供的函数 |
| some | 对数组中的元素进行测试,如果至少有一个元素满足测试函数,则返回true |
| every | 对数组中的所有元素进行测试,只有当所有元素都满足测试函数时,才返回true |
| filter | 创建一个新数组,包含通过所提供函数实现的测试的所有元素(过滤) |
| map | 创建一个新数组,其结果是调用提供的函数后返回的值 |
| reduce | 对数组中的每个元素执行一个reducer函数,将其结果汇总为单个返回值 |
2.搜索数组的方法
| 方法名 | 作用 |
|---|---|
| find | 返回数组中满足提供的测试函数的第一个元素的值。如果没有元素满足测试,返回 undefined |
| findIndex | 返回数组中满足提供的测试函数的第一个元素的索引。如果没有元素满足测试,则返回 -1 |
- 其他数组方法
| 方法名 | 作用 |
|---|---|
| fill | 将一个固定值从一个起始索引(默认为 0)填充到终止索引(默认为数组长度),赋值操作不包括终止索引 |
| copyWithin | 将数组的一部分浅复制到数组内的另一个位置,覆盖原有的值。这个方法不会改变数组的长度 |
很显然我们现在有以下几种解决方式
假设数组是这样的
const array = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
]
const targetId = 2 //需要匹配的id
let foundItem //拿到的项
- 使用for循环遍历(个人总结:适用于要在匹配后立即进行操作的情况)
/**
* for循环
*/
for (let i = 0; i < array.length; i++) {
if (array[i].id === targetId) {
foundItem = array[i]
break // 找到匹配项后退出循环
}
}
/**
* for ... of循环(ES6中增加的,更加简洁)
*/
for (const item of array) {
if (item.id === targetId) {
foundItem = item
break
}
}
- 使用数组方法进行遍历
/**
* forEach方法(不推荐使用,无论怎么样都会循环遍历整个数组)
*/
arr.forEach(item => {
if(item.id === targetId) {
foundItem = item
return // forEach中没有break所以直接return掉(注意:退出的是函数,不是循环,forEach会遍历数组全部元素)
}
})
/**
* 使用filter方法(当数组中存在不止一个匹配项,并且需要全部取到的时候)
*/
let foundItems = arr.filter(item => item.id === targetId)
- 使用数组方法进行搜索
/**
* find方法
*/
const foundItem = array.find(item => item.id === targetId);
。。。。面试的时候应该说这么多已经ok啦,我们接着来