这是我参与「第四届青训营 」笔记创作活动的的第7天
首先是返回值和是否修改数组的问题
常用的遍历数组的方法
| 方法 | 作用 | 返回值 | 是否会修改数组 |
|---|---|---|---|
| forEach | 对数组的每个元素执行一次给定的函数 | undefined | 看具体的操作情况 |
| map | 创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成 | 新数组 | 否 |
| some | 测试数组中是不是至少有 1 个元素通过了被提供的函数测试 | 布尔 | 否 |
| every | 测试数组内的所有元素是否都能通过某个指定函数的测试 | 布尔 | 否 |
| filter | 创建一个新数组,其包含通过所提供函数实现的测试的所有元素 | 新数组 | 否 |
| find | 满足提供的测试函数的第一个元素的值 | 值/undefined | 否 |
| findIndex | 数组中满足提供的测试函数的第一个元素的索引 | 索引或-1 | 否 |
| findLast | 满足提供的测试函数的最后一个元素的值 | 值/undefined | 否 |
| findLastIndex | 数组中满足提供的测试函数的最后一个元素的索引 | 索引或-1 | 否 |
| reduce | 见下边 | 结果汇总的单个返回值 | 否 |
| reduceRight | 见下边 | 结果汇总的单个返回值 | 否 |
map 和 filter对数组操作的影响
在使用图示样例的情况下,由于两个方法搞混了,今天写代码的时候费了好大劲
- map对不满足条件的值(未设置返回值的值)会返回undefined
- filter只会返回满足条件的值
- filter返回的是数组原始的值,map会返回操作后的值
find, findIndex, findLast, findLastIndex
- 遍历找到满足条件的结果就会停止遍历
- findLast, findLastIndex数组逆序遍历进行
some, every
- every遍历到满足条件的数即停止遍历
reduce使用场景
- 数组求和、求积
- 数组扁平化
function flatMap(arr) {
return Array.isArray(arr) ? arr.reduce((acc, value) => {
return [...acc, ...flatMap(value)];
}, []): [arr]
}
flatMap([1, [2, 3], 4])
- 对象过滤
const pick = (obj, arr) => {
return arr.reduce((acc, current) => {
if (current in obj) {
acc[current] = obj[current];
return acc;
}
}, {})
}
pick({a: 1, b: 2}, ['a'])
- 对象取值
const a = {b: {c: {d: 2}}};
const get = (obj, arr) => {
return arr.reduce((acc, current) => {
return acc ? acc[current] : null;
}, obj)
}
get(a, ['b', 'c', 'd'])
其他常用方法
| 方法 | 作用 | 返回值 | 是否会修改数组 |
|---|---|---|---|
| shift | 方法从数组中删除第一个元素 | 该元素的值 | 是 |
| unshift | 将一个或多个元素添加到数组的开头 | 数组的新长度 | 是 |
| pop | 从数组中删除最后一个元素 | 该元素的值 | 是 |
| push | 将一个或多个元素添加到数组的末尾 | 数组的新长度 | 是 |
| splice | 删除或替换现有元素或者原地添加新的元素 | 数组形式返回被修改的内容 | 是 |
| slice | 数组[begin, end)(浅拷贝) | 返回一个新的数组对象 | 否 |
| sort | 用原地算法对数组的元素进行排序 | 返回数组 | 是 |
| reverse | 将数组中元素的位置颠倒 | 返回数组 | 是 |
| concat | 合并两个或多个数组 | 返回一个新数组 | 否 |
| join | 将一个数组(或一个类数组对象)的所有元素连接成一个字符串 | 字符串 | 否 |
| indexOf | 找到一个给定元素的第一个索引 | 索引或-1 | 否 |
| lastIndexOf | 找到一个给定元素的最后一个索引 | 索引或-1 | 否 |
| keys | 数组中每个索引键 | 索引数组 | 否 |
| values | 数组每个索引的值 | 索引值数组 | 否 |
注意push, unshift的返回值
join类数组,默认使用","拼接
定义一个二维数组
- rows为二维数组的行数
- cols为二维数组的列数
- initValue是数组各位的默认值
const arr = new Array(rows).fill(0).map(
() => new Arrary(cols).fill(initValue)
)