常用方法
**Array.isArray(value):**用来判断某个变量是否是一个数组对象。
**Array.from(value):**从类数组对象或者可迭代对象中创建一个新的数组实例。
**Array.of():**根据一组参数来创建新的数组实例,支持任意的参数数量和类型。
-----------------------------------------------------------------------------------------------
**push()、pop():**添加、删除数组尾部元素(不改变原数组)
**unshift()、shift():**添加、删除数组头部元素,返回删除的元素(改变原数组)
**join(value):**将数组用value连接为字符串(不改变原数组)
**concat(value):**将数组和/或值连接成新数组(不改变原数组)
**flat():**将二维数组变为一维数组(不改变原数组)
**flatmap():**相当于map与flat的结合(不改变原数组)
-----------------------------------------------------------------------------------------------
**sort():**对数组元素进行排序(改变原数组)
**reverse():**反转数组(改变原数组)
------------------------------------------------------------------------------------------------
**includes():**返回一个布尔值,表示某个数组是否包含给定的值(不改变原数组)
**indexOf(value):**从索引为0开始,检查数组是否包含value,有则返回匹配到的第一个索引,没有返回-1(不改变原数组)
**lastIndexOf(value):**从最后的索引开始,检查数组是否包含value,有则返回匹配到的第一个索引,没有返回-1(不改变原数组)
**find(fn):**返回数组中第一个匹配fn函数中条件的值没有则返回undefined(不改变原数组)
**findIndex(fn):**返回数组中第一个匹配fn函数中条件的索引没有则返回undefined(不改变原数组)
------------------------------------------------------------------------------------------------
**slice(start,end):**返回新数组,包含原数组索引start的值到索引end的值,不包含end(不改变原数组)
**splice(index,count,value):**从索引为index处删除count个元素,插入value(改变原数组)
**fill(value,start,end):**使用给定value填充数组,从索引start开始end结束,不包含end(改变原数组)
**copyWithin(target,start,end):**将数组从start到end索引的元素(不包含end)复制到target开始的索引位置(改变原数组)
------------------------------------------------------------------------------------------------
**keys():**返回数组的可迭代对象,包含原始数组的键(key),可用for...of遍历(不改变原数组)
**values():**返回一个新的迭代器(不改变原数组)
**entries():**返回一个新的Array迭代器对象,可用for...of遍历(不改变原数组)
------------------------------------------------------------------------------------------------
**forEach():**遍历数组(不改变原数组)
**for...of:**遍历数组
**map(fn):**以fn函数中返回值组成新的数组返回(不改变原数组)
**reduce():**累计器(不改变原数组)
**reduceRight():**与reduce功能一样,只是从数组末尾开始进行累计(不改变原数组)
**filter(fn):**返回数组中满足fn函数中条件的集合(不改变原数组)
**some(fn):**检查数组中是否含有满足fn函数条件的值(不改变原数组)
**every(fn):**判断数组中是否所有元素都满足fn函数中的条件(不改变原数组)
------------------------------------------------------------------------------------------------
**toString():**将数组中的元素用逗号拼接成字符串(不改变原数组)
**toLocalString():**将数组中的每个元素使用各自的toLocaleString()转换后用,拼接(不改变原数组)
**valueOf():**返回数组对象的原始值(不改变原数组)
注意点
数组空位
数组的空位指,数组的某一个位置没有任何值。比如,Array构造函数返回的数组都是空位。
Array(3) // [, , ,]
注意,空位不是undefined,一个位置的值等于undefined,依然是有值的。空位是没有任何值,in运算符可以说明这一点。
0 in [undefined, undefined, undefined] // true
0 in [, , ,] // false
ES5 对空位的处理,已经很不一致了,大多数情况下会忽略空位。
ES6 则是明确将空位转为undefined。
由于空位的处理规则非常不统一,所以建议避免出现空位。
稀疏数组与密集数组
面试考点
手写数组去重
手写数组扁平化
数组扁平化的方式有哪些
求数组最大最小值
求数组的交集、并集、差集
数组排序
数组乱序
判断一个对象是数组有哪些方法?
数组各种遍历方式,哪种性能更好?各自的性能如何?
参考
JavaScript专题之学underscore在数组中查找指定元素
JavaScript专题之jQuery通用遍历方法each的实现
js基础进阶--关于Array.prototype.slice.call(arguments) 的思考