来源于红宝书第四版和一些个人的积累
1. 创建方法
构造函数
1 2 3 4 let colors = new Array () let colors = new Array (20 ) let colors = new Array ("yellow" ) let colors = new Array ("green" ,"yellow" )
字面量
1 2 let colors = []let colors = ["green" ,"yellow" ]
2. 数组方法(静态方法) Array.from() 将类数组对象转化为真实数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 console .log (Array .from ("Matt" )) const m = new Map ().set (1 ,2 ).set (3 ,4 ) console .log (Array .from (m)) const s = new Set (1 ,2 ,3 ,4 ) console .log (Array .from (s)) function getArgsArray ( ){ return Array .from (arguments ) } getArgsArray (1 ,2 ,3 ,4 )
可以利用Set的特性和Array.from实现快速的数组去重
1 2 3 4 function noRepeat (arr ){ return Array .from (new Set (arr)) }
Array.of() 用于将一组参数转为数组对象
1 2 console .log (Array .of (1 ,2 ,3 ,4 )) console .log (Array .of (undefined ))
Array.isArray() 检测元素是否是数组
1 2 console .log (Array .isArray (new Set ([1 ,2 ,3 ]))) console .log (Array .isArray ([1 ,2 ,3 ]))
3. 数组空位 1 2 3 4 5 const arr = [,,,,] arr.map (v =>6 ) arr.join ('-' )
4. 数组索引 取得或设置数组的值,需要使用索引(下标)访问对应元素
1 2 3 4 let colors = ['yellow' ,'blue' ,'green' ]colors[0 ] colors[1 ] = 'black' console .log (colors)
length 保存数组的长度信息
1 2 let colors = ['yellow' ,'blue' ]console .log (colors.length )
length 属性并不是只读的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 let colors = ['yellow' ,'blue' ]colors.length = 1 console .log (colors) let colors = ['yellow' ,'blue' ]colors.length = 5 console .log (colors) console .log (colors[3 ]) let colors = ['yellow' ]colors[colors.length ] = 'green' colors[colors.length ] = 'red' console .log (colors)
5. 数组方法(实例方法) 5.1迭代器方法 keys() 返回数组索引的迭代器
values() 返回数组元素的迭代器
entries() 返回 索引=>值 对 的迭代器
1 2 3 4 5 6 const arr = ['this' ,'is' ,'array' ,'function' ]console .log (Array .from (arr.keys ())) console .log ([...arr.keys ()]) console .log (Array .from (arr.values ())) console .log (Array .from (arr.entries ()))
5.2复制和填充方法 ES6新增的两个方法
fill() 将指定元素全部或部分填充到数组
1 2 3 4 5 6 7 8 9 10 11 12 13 let arr = [1 ,2 ,3 ,4 ]arr.fill (0 ) let arr1 = [1 ,2 ,3 ,4 ]arr1.fill (0 ,2 ) let arr2 = [1 ,2 ,3 ,4 ,5 ]arr1.fill (0 ,1 ,4 ) let arr3 = [1 ]arr2.fill (0 ,-1 ,3 )
copyWithin() 按照指定范围浅复制数组中的部分内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 let intsfunction reset ( ){ ints = [0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ] } reset ()ints.copyWithin (5 ) console .log (ints) reset ()ints.copyWithin (0 ,5 ) reset ()ints.copyWithin (4 ,0 ,3 )
5.3转换方法 toString() & toLocaleString()
**valueOf() **
1 2 3 4 5 const colors = ['yellow' ,'red' ,'green' ]console .log (colors.toString ()) console .log (colors.valueOf ()) alert (colors.valueOf ())
注意: 如果数组中的某一项是 null 或 undefined,则在 join()、toLocaleString()、toString()、valueOf() 返回的结果中会以空字符串表示
5.4栈方法 push() 数组尾部推入一个或多个元素,返回数组最新的长度
pop() 数组尾部删除一个元素,返回被删除的元素
1 2 3 4 5 6 7 8 9 let colors = ['blue' ]const count = colors.push ('yellow' ,'red' )console .log (colors) console .log (count) const item = colors.pop ()console .log (colors) console .log (item)
5.5队列方法 unshift()
shift()
1 2 3 4 5 6 7 8 9 10 let colors = ['yellow' ,'red' ]const item = colors.shift () console .log (item) console .log (colors) const count = colors.unshift ('green' ,'blue' )console .log (count) console .log (colors)
5.6排序方法 sort() 数组排序
reverse() 数组反转
1 2 3 [2 ,3 ,1 ,4 ].sort ((a,b )=> a-b) [2 ,3 ,1 ,4 ].sort ((a,b )=> b-a)
5.7操作方法 concat() 数组合并 不改变原数组
1 2 3 4 5 6 7 8 9 let coldColors = ['blue' ,'purple' ]let warmColors = ['blue' ,'purple' ]let colors = coldColors.concat (warmColors)console .log (colors) console .log (coldColors.concat ('cyan' )) console .log (coldColors,warmColors)
splice() 会改变原数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 let colors = ['red' ,'yellow' ,'blue' ]const deleteItems = colors.splice (0 ,1 )console .log (colors,deleteItems) let colors = ['red' ,'blue' ]colors.splice (1 ,0 ,'yellow' ,'green' ) console .log (colors) let colors = ['red' ,'blue' ]colors.splice (0 ,2 ,'green' ,'yellow' ) console .log (colors)
5.8搜索和位置方法 ECMAScript 提供两类搜索数组的方法:按严格相等搜索,按断言函数搜索
严格相等
indexOf() 从0开始搜索,与每一项进行全等比较,返回第一个匹配的索引,如果没有匹配返回-1
lastIndexOf() 从末尾开始搜索,与每一项进行全等比较,返回第一个匹配的索引,如果没有匹配返回-1
includes() 如果数组中有至少一项匹配,返回true,没有返回 false
断言函数
find()
findIndex()
断言函数接收三个参数,元素,索引,数组本身
5.9 迭代方法 every() 每一项都运行传入的函数,如果结果都为true,返回true,否则返回false
some() 每一项都运行传入的函数,如果结果都为false,返回false,否则返回true
1 2 3 4 5 6 7 8 9 10 11 12 13 14 let numbers = [1 ,2 ,3 ,4 ,5 ]let flag1 = numbers.every ((item,index,array )=> { return item > 4 }) let flag2 = numbers.every ((item,index,array )=> { return item > 0 }) let flag3 = numbers.some ((item,index,array )=> { return item > 4 }) let flag4 = numbers.every ((item,index,array )=> { return item > 6 }) console .log (flag1,flag2,flag3,flag4)
forEach() 每一项都运行传入的函数,没有返回值
map() 每一项都运行传入的函数,返回每次函数运行结果组成的数组
filter() 每一项都运行传入的函数,返回每次函数运行结果为 true 组成的数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 let arr = [1 ,2 ,3 ,4 ,5 ]const newArr = []const res1 = arr.forEach ((item,index )=> { newArr.push (item + 1 ) }) console .log (newArr) console .log (res1) const res2 = arr.map ((item,index )=> { return item + 1 }) console .log (res2) const res3 = arr.filter ((item,index )=> { return item % 2 }) console .log (res3)
可以使用map快速取出数组对象的某一属性组成的数组
1 2 3 let list = [{id :1 ,name :'张三' },{id :2 ,name :'李四' },{id :3 ,name :'王五' }]const nameList = list.map (v => v.name )
因为filter,reduce,map等返回值还是数组,所以可以连续使用
1 2 3 4 5 6 7 const ScoreList = [{id :1 ,name :'李四' ,score :90 },{id :2 ,name :'王五' ,score :80 },{id :1 ,name :'张三' ,score :95 },{id :1 ,name :'郭乐' ,score :85 }]const ScoreSum = ScoreList .map (v => v.score ).reduce ((a,b )=> a+b,0 ) const WellSum = ScoreList .filter (v => v.score > 80 ).map (v => v.score ).reduce ((a,b )=> a+b,0 )
5.10 归并方法 reduce() 从数组第一项开始遍历到最后一项
reduceRight() 从数组的最后一项开始遍历到第一项
迭代数组的所有项在此基础上构建一个最终返回值
1 2 3 4 5 6 7 8 9 10 const values = [1 ,2 ,3 ,4 ,5 ,6 ]let sum = values.reduce ((prev,current,index,arr )=> prev+current)console .log (sum) [].reduce ((a,b )=> a+b) [].reduce ((a,b )=> a+b,0 )