数组
-
JS 数组有哪些方法?
- 常见的方法包括:
push()
,pop()
,shift()
,unshift()
splice()
,slice()
,concat()
forEach()
,map()
,filter()
,reduce()
,reduceRight()
some()
,every()
,find()
,findIndex()
sort()
,reverse()
,join()
,flat()
,flatMap()
indexOf()
,lastIndexOf()
,includes()
- 常见的方法包括:
-
数组去重的方式与时间复杂度:
Set
:Array.from(new Set(array))
或array.filter((item, index) => array.indexOf(item) === index)
- 时间复杂度:
O(n)
(Set)或O(n^2)
(filter + indexOf)
- 时间复杂度:
- 双循环去重:手动遍历每个元素
- 时间复杂度:
O(n^2)
- 时间复杂度:
- 排序后去重:先对数组排序,再遍历去重
- 时间复杂度:
O(n log n)
- 时间复杂度:
-
将数组的
length
设置为 0,取第一个元素会返回什么?- 返回
undefined
,因为数组已经被清空了。
- 返回
-
数组扁平化的多种方法:
flat()
:array.flat(Infinity)
- 递归:通过递归的方式展开嵌套数组
reduce()
:array.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), [])
toString()
然后split()
:适合处理数字或字符串类型的数组array.toString().split(',')
-
什么是类数组?
- 类数组是一个拥有
length
属性并且可以通过索引访问元素的对象,但它不具有数组的方法,例如arguments
对象或 DOM 集合。
- 类数组是一个拥有
-
类数组转数组的方法:
Array.from()
:Array.from(arrayLike)
slice()
:Array.prototype.slice.call(arrayLike)
spread 运算符
:[...arrayLike]
concat()
:Array.prototype.concat.apply([], arrayLike)
-
如何遍历
arguments
类数组?- 通过常规的
for
循环或用Array.prototype.forEach.call(arguments, callback)
。
- 通过常规的
-
判断数组的方式:
Array.isArray()
instanceof
:value instanceof Array
Object.prototype.toString.call(value)
:返回[object Array]
-
新创建一个数组空间:
Array()
:let arr = new Array(10)
(创建10个空位)fill()
:let arr = Array(10).fill(0)
-
ES6 数组方法及特性:
find()
:返回满足条件的第一个元素findIndex()
:返回满足条件的第一个元素的索引includes()
:检查数组是否包含某个元素flat()
:用于数组扁平化from()
:从类数组创建数组
-
数组方法如何实现
break
:- 对于
forEach()
和其他循环类方法,无法直接break
,可以通过抛出异常或用some()
/every()
方法,返回true
提前停止。
- 对于
-
常用数组方法中哪些改变原数组,哪些不改变?
- 改变原数组:
push()
,pop()
,shift()
,unshift()
,splice()
,sort()
,reverse()
- 不改变原数组:
map()
,filter()
,reduce()
,find()
,findIndex()
- 改变原数组:
-
filter()
方法的使用:filter()
用于筛选数组元素,返回一个新数组:const result = array.filter(element => element > 10);