面试知识点总结 - js Array

  1. 概念
  1. 数组是数据的有序列表
  2. 长度可以动态调整(通过length调整,或随着数据的增加删除改变
  3. 每一项可以保存任何数据类型的数据
  4. 索引范围是0->length-1
  5. 改变原数组的方法有7个:push、pop、unshift、shift、reverse、sort、splice
  1. 创建数组
  1. var arr = new Array()
  2. var arr = []
  1. 检测数组
  1. arr instanceof Array
  2. Array.isArray(arr)
  1. join(分隔符字符串):
    数组转字符串,用分隔符分隔数组的每一项,并组成字符串
  2. 栈(先进后出)和队列(先进先出)方法:push、pop、unshift、shift
    添加返回新数组的长度,删除返回删除的项,改变原数组
  1. push():尾添加,接收任意个参数,将每一个参数逐个添加到数组的尾部
  2. pop():尾删除,删除尾部的最后一项,不接收参数
  3. unshift():头添加
  4. shift():头删除
  1. 重排序方法:
    改变原数组
  1. reverse():反转数组项的顺序
  2. sort(函数):
  1. 参数为一个函数:function(a,b){},第一个参数a为数组的第二项,第二个参数b为数组的第一项
  2. 数组每一项都调用toString(),比较的为调用toString()后返回的字符串
  3. 默认为升序(即小的在前)
  4. 升序:return a-b
  5. 降序:return b-a
  6. 例如:数组有两项,分别为:[1,2],升序时为:a-b = 2-1>0,所以升序:return a-b
  7. 例如:数组有两项,分别为:[1,2],降序时为:b-a = 1-2<0,两项交换位置,所以降序:return b-a
  8. sort原理:返回负数,ab两项交换位置;返回正数或0,ab两项位置不变
  1. concat():连接数组,接收任意个参数,将参数逐个添加到当前数组的尾部,返回新数组,不改变原数组
  2. slice(start,end-1):截取数组
  1. 不改变原数组,返回新截取的数组
  2. 第二个参数不传为截取到尾部
  3. 参数为负数时加上数组的长度
  4. 开始位置大于结束位置返回空数组[]
  1. splice(开始位置,删除的个数,插入的项,插入的项n…):
    删除或替换数组,返回删除项组成的数组,没有删除(第二个参数为0)返回空数组[]
  2. indexOf()、lastIndexOf():
    查找指定项的位置,不改变原数组,返回查找项的位置,没有找到返回-1,查找为全等查找
  1. indexOf(要查找的项,开始查找的位置):从前向后
  2. lastIndexOf(要查找的项,开始查找的位置):从后向前
  1. 遍历方法:forEach、map、filter、some、every
    参数均为:要在数组每一项上运行的函数,运行该函数的作用域对象;第一个参数函数接收3个参数:function(数组当前项的值,数组当前项的索引,数组本身){}
  1. forEach():对数组中的每一项运行给定函数,没有返回值
  2. map():对数组中的每一项运行给定函数,返回调用函数的结果组成的数组
  3. filter():对数组中的每一项运行给定函数,返回调用函数后返回true的数组项组成的数组
  4. some():对数组中的每一项运行给定函数,调用函数的任意一项返回true,则返回true
  5. every():对数组中的每一项运行给定函数,调用函数的所有项返回true,则返回true
  6. find():对数组中的每一项运行给定函数,返回调用该函数后第一个返回true的数组项,没有返回undefined
  7. findIndex():对数组中的每一项运行给定函数,返回第一个为true的数组项的索引,没有返回-1
  1. 归并方法:reduce、reduceRight,迭代数组的所有项,构建一个最终的返回值
    参数均为:在数组每一项上调用的函数,作为归并的初始值;第一个参数函数接收4个参数:function(数组前一项调用函数后返回的值,数组当前项的值,数组当前项的索引,数组本身){}
  1. reduce():从前向后
  2. reduceRight():从后向前

ES6新增

  1. 将指定参数转为数组:Array.from()、Array.of()、扩展运算符
  2. 数组实例的方法:copyWithin()、fill()、includes()、entries()、keys()、values()
  1. rest参数、扩展运算符(…):
  1. rest参数:多个参数序列转为数组
  2. 扩展运算符(…):
  1. 数组转为多个用逗号分隔的参数序列(把数组展开,),…后面可以跟数组、对象、表达式
    …(x>0?[1,2]:[])
    …[1,2,3]
  1. 扩展运算符背后调用的是遍历器接口(Symbol.iterator),没有部署该接口的对象不能使用扩展运算符
  2. 扩展运算符用途:
    函数调用:([].push(…[1,2,3]),push()参数为数组时会当成一项放到调用的数组中,使用扩展运算符后,会当成3项)
    函数返回值
    与解构赋值结合
    合并数组(concat、apply、扩展运算符)
    字符串转数组
    将有Iterator接口的对象转为真正的数组
  1. 例子:
  1. 扩展运算符:加[]与解构赋值结合
    […‘aaa’] //[‘a’,‘a’,‘a’]
    …‘aaa’ //a,a,a
    […[1,2,3]] //[1,2,3]
    …[1,2,3] //1,2,3
  1. rest参数:
    function test(…arr){console.log(arr)}
    test(1,2,3) //[1,2,3]
  1. Array.from():将指定参数转化为数组
  1. 将可遍历对象(有Iterator接口的对象)和类数组对象(有length属性的对象)转为数组
  2. 扩展运算符只能讲可遍历对象转为数组
  3. 有Iterator的对象:字符串、数组、arguments、DOM操作返回的NodeList对象、Set、Map,他们可以使用for…of、扩展运算符、generator
  4. Array.from(obj,fn,执行函数的作用域对象this):接收3个参数,加上第2,3个参数功能类似map方法
    Array.from(obj,fn)=>Array.from(obj).map(fn)
  1. Array.of():
  1. 接收任意个参数,返回每个参数值组成的数组,无参数返回空数组[]
  2. 实现方法:
    function test(){return [].slice.call(arguments)}
  3. 例子:
    Array.of() //[]
    Array.of(1) //[1]
    Array.of(1,2) //[1,2]
    Array.of(undefined) //[undefined]
  1. 实例方法:copyWithin()
  1. 将当前数组指定位置的数组项复制到其他位置(会覆盖原有位置的数组项),改变原数组
  2. 接收3个参数:开始替换的位置(必填),开始读取的位置(默认为0,负值要倒数,倒数从1开始),结束读取的位置(默认为数组的长度,负数倒数)
  3. [1,2,3,4,5].copyWithin(0,-2,-1) //[4,2,3,4,5],-2相当于3号位即数组项4,-1相当于4号位即数组项5
  1. 实例方法:find()、findIndex()
  1. find(fn,执行函数时的作用域对象this):所有数组项依次调用指定函数,返回调用该函数后第一个返回true的数组项,没有返回undefined
  2. findIndex():同find,返回第一个为true的数组项的索引,没有返回-1
  1. 实例方法:fill()
  1. 用给定的值填充数组,数组中已有的会被覆盖
  2. 接收3个参数:用于填充的值,填充开始的位置,填充结束的位置
  1. 实例方法:entries()、keys()、values()
  1. 遍历数组,返回一个遍历器对象,用于for…of循环
  2. 三者区别
    entries():遍历键值对
    keys():遍历键名
    values():遍历键值
  1. 实例方法:includes()
  1. 返回布尔值,判断数组中是否包含给定的值,与字符串的includes类似
  2. 接收2个参数:查找的值,查找开始的位置(默认为0,负数时为倒数(从1开始),大于数组长度是位0)
  1. 数组的空位
  1. 空位指数组的某个位置没有任何值(不是undefined)
    Array(3) //[,]
  2. ES5处理空位表现不一致
    forEach、filter、some、every:跳过空位
    map:跳过空位,但会保留这个值
    join、toString:将空位视为undefined,而undefined和null会被处理为空字符串‘’
  3. ES6:都将空位转为undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值