js数组 | 青训营笔记

58 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第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会返回操作后的值

image.png

image.png

find, findIndex, findLast, findLastIndex

  • 遍历找到满足条件的结果就会停止遍历
  • findLast, findLastIndex数组逆序遍历进行

some, every

  • every遍历到满足条件的数即停止遍历

image.png

reduce使用场景

  • 数组求和、求积
  • 数组扁平化
function flatMap(arr) {
    return Array.isArray(arr) ? arr.reduce((acc, value) => {
        return [...acc, ...flatMap(value)];
    }, []): [arr]
}
flatMap([1, [2, 3], 4])

image.png

  • 对象过滤
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'])

image.png

  • 对象取值
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'])

image.png

其他常用方法

方法作用返回值是否会修改数组
shift方法从数组中删除第一个元素该元素的值
unshift将一个或多个元素添加到数组的开头数组的新长度
pop从数组中删除最后一个元素该元素的值
push将一个或多个元素添加到数组的末尾数组的新长度
splice删除或替换现有元素或者原地添加新的元素数组形式返回被修改的内容
slice数组[begin, end)(浅拷贝)返回一个新的数组对象
sort原地算法对数组的元素进行排序返回数组
reverse将数组中元素的位置颠倒返回数组
concat合并两个或多个数组返回一个新数组
join将一个数组(或一个类数组对象)的所有元素连接成一个字符串字符串
indexOf找到一个给定元素的第一个索引索引或-1
lastIndexOf找到一个给定元素的最后一个索引索引或-1
keys数组中每个索引键索引数组
values数组每个索引的值索引值数组

注意push, unshift的返回值

join类数组,默认使用","拼接

image.png

image.png

定义一个二维数组

  • rows为二维数组的行数
  • cols为二维数组的列数
  • initValue是数组各位的默认值
const arr = new Array(rows).fill(0).map(
    () => new Arrary(cols).fill(initValue)
)