目录
1.10 indexOf() 与 lastIndexOf() ------ES5新增
1.19 find() 和 findIndex() ------ES6新增
1.25 reduce() 和 reduceRight() ------ES6新增
1.26 flat() 和 flatMap() ------ES10新增
1.1 join()
将数组以指定值去分隔,不指定值默认为逗号(,)
- 语法:数组.join();
- 返回值:分隔后的字符串
let arr = ['hello','friend'] let str1 = arr.join(); let str2 = arr.join('-') console.log(str1);//hello,friend console.log(str2);//hello-friend
注意: 不改变原始数组
1.2 shift() 与 pop()
1.2.1 shift()
删除数组第一个数据
- 语法:数组.shift()
- 返回值:删除的数据
let arr = [1,2,3,4,5] let str = arr.shift(); console.log(str);//1
注意:改变了原始数组(也就是说长度也被改变)
1.2.2 pop()
删除数组最后一个数据
- 语法:数组.pop()
- 返回值:删除的数据
let arr = [1,2,3,4,5] let str = arr.pop(); console.log(str);//5
注意:改变了原始数组(也就是说长度也被改变)
1.3 unshift() 与 push()
1.3.1 unshift()
将指定的数据添加到数组开头
- 语法:数组.unshift(‘值1’,‘值2’)
- 返回值:添加后新数组长度
let arr = ['l','l','o'] let str = arr.unshift('h','e'); console.log(str);//5
注意:改变了原始数组(也就是说长度也被改变)
1.3.2 push()
将指定的数据添加到数组末尾
- 语法:数组.push(‘值1’,‘值2’)
- 返回值:添加后新数组长度
let arr = ['h','e','l'] let str = arr.push('l','o'); console.log(str);//5
注意:改变了原始数组(也就是说长度也被改变)
1.4 sort()
对数组的数据进行排序(升序或者降序)
- 语法:数组.sort(回调函数)
- 返回值:排列好的数组
let arr = ['1','2','3',4,5] let str2 = arr.sort(function(a,b){return a-b}); console.log(str2);//['1', '2', '3', 4, 5] let arr = ['edit','banner','canner','die'] let str1 = arr.sort(); console.log(str1);//['banner', 'canner', 'die', 'edit'] console.log(arr);
- 默认排序顺序是将元素转为字符串,然后比较的是它们的UTF-16代码单元值
- 回调函数有两个参数用来进行判断(升序或降序排列)返回值小于0,a 会被排列到 b 之前;等于0,a 和 b 的相对位置不变;大于0,b 会被排列到 a 之前
注意:
- 改变了原始数组顺序
- 加了回调函数只能判断数字和字符串类型的数字(例如:‘7’,‘8’),像(‘abc’,‘a’,‘banner’)无法使用回调函数去排序。这种只能用不加回调函数的sort去升序,然后用reverse()来颠倒数组做降序
1.5 reverse()
颠倒数组中的数据
- 语法:数组.reverse(回调函数)
- 返回值:颠倒后的数组
let arr = ['edit','banner','canner','die'] let str = arr.reverse(); console.log(str);//['die', 'canner', 'banner', 'edit']
注意:改变了原始数组
1.6 concat()
连接两个数组
- 语法:数组1.concat(数组2)
- 返回值:连接后的新数组
let arr1 = ['edit','banner','canner','die'] let arr2 = [1,2,3] let str1 = arr1.concat(arr2); console.log(str1);//['edit', 'banner', 'canner', 'die', 1, 2, 3]
注意:没有改变原始数组(返回的是新数组)
1.7 slice()
截取数组指定位置的数据(浅拷贝)
- 语法:数组.slice(开始索引,结束索引) 不包括结束索引
- 返回值:截取后的新数组
let arr = ['edit','banner','canner','die',1,2,3] let str = arr.slice(1,3); console.log(str);//['banner', 'canner']
注意:
- 没有改变原始数组(返回的是新数组)
- 截取的数据复制成新数组是浅拷贝不是深拷贝
- 如果不声明开始索引和结束索引,截取的是整个数组;只给一个索引会当做是开始索引
1.8 splice()
这个方法功能就比较多了,能删除、替换现有的元素或者添加新的元素到指定地方
- 语法:数组.splice(索引,删除的个数,添加的数据)
- 返回值:根据第二个参数进行返回,返回类型为数组
//从下标为1的位置删除2个数据 let arr = ['edit','banner','canner','die',1,2,3] let str = arr.splice(1,2); console.log(str);//['banner', 'canner'] //将下标为1的元素替换为指定元素‘1’ let arr = ['edit','banner','canner','die',1,2,3] let str = arr.splice(1,1,'1'); console.log(str);//['banner'] //在指定位置添加指定元素‘1’ let arr = ['edit','banner','canner','die',1,2,3] let str = arr.splice(1,0,'1'); console.log(str);//[]
注意:改变了原始数组
1.9 toString()
将数组转换字符串
- 语法:数组.toString()
- 返回值:转换后的字符串
let arr = ['h','e','l','l','o'] let str = arr.toString(); console.log(str);//h,e,l,l,o
注意:没有改变原始数组
1.10 indexOf() 与 lastIndexOf() ------ES5新增
1.10.1 indexOf()
找到第一个给定元素的索引
- 语法:数组.indexOf(‘查询的元素’,‘从哪个位置找’)
- 返回值:查询到元素的索引,没查询到返回-1
let arr = [1,2,3,1,2,4,5,6] let str1 =arr.indexOf(2);//1 let str2 = arr.indexOf(2,2);//4 console.log(str1,str2);
注意:
- 没有改变原始数组
- 如果第二个参数大于等于数组的长度就直接返回-1
- 如果第二个参数为负数则从末尾开始抵消,-1即最后一个元素,-2即倒数第二个元素。知道指定位置后在往后查找。
1.10.2 lastIndexOf()
找到第一个给定元素的索引(从后往前)
- 语法:数组.indexOf(‘查询的元素’,‘从此位置开始逆向查找’)
- 返回值:查询到元素的索引,没查询到返回-1
let arr = [1,2,3,1,2,4,5,2,6] let str1 =arr.lastIndexOf(2);//7 let str2 = arr.lastIndexOf(2,4);//4 console.log(str1,str2);
查找机制 :-1为最末尾的元素,如果第二个参数是-5,那么他会从后往前数第五个数据开始往前去找,例如
let arr = [1,2,3,1,2,4,5,2,6] let str1 =arr.lastIndexOf(2);//7 let str2 = arr.lastIndexOf(2,-5);//4
注意:
- 没有改变原始数组
- 该方法为逆向查找,注意第二个参数值
1.11 forEach() ------ES5新增
遍历数组每个元素,并执行给定函数
- 语法:数组.forEach(回调函数( '处理的元素' , '下标' , '数组本身'){},回调函数使用的this值)
- 返回值:undefined
let arr = [1,2,3,4,5] let str = arr.forEach(function(value,index,arr){console.log(value,index);}); console.log(str);//undefined
注意:没有改变原始数组
1.12 some() ------ES5新增
遍历数组找到符合要求的数据
- 语法:数组.some(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值)
- 返回值:布尔值
let arr = [1,2,3,4,5,6] let str = arr.some(function(a,index,arr){console.log(index,arr);return a%2===0 ;}); console.log(str);//true //下标即index参数,会返回从0下标到符合值的下标,是可选参数 //数组本身即arr,会返回原数组,为可选参数 //回调函数this值也为可选参数
注意:没有改变原始数组
1.13 map() ------ES5新增
遍历数组执行指定的回调函数
- 语法:数组.map(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值)
- 返回值:每个元素执行完回调函数返回的结果组成的新数组
let arr = [1,2,3,4,5] let str = arr.map(function(value,index,arr){console.log(value,index); return value>3}); console.log(str);//[false, false, false, true, true]
注意:没有改变原始数组
1.14 filter() ------ES5新增
筛选出数组中想要的数据
- 语法:数组.filter(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值)
- 返回值:返回一个通过测试即通过回调函数的新数组
let arr = [1,2,3,4,5] let str = arr.filter(function(value,index,arr){console.log(value,index); return value>3}); console.log(str);//[4, 5]
注意:没有改变原始数组
1.14 every() ------ES5新增
判断数组所有元素是不是都能通过回调函数规则
- 语法:数组.every(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值)
- 返回值:布尔值
let arr = [1,2,3,4,5] let str = arr.every(function(value,index,arr){console.log(value,index); return value>3}); console.log(str);//false
注意:没有改变原始数组
1.15 concat() ------ES5新增
用于合并两个数组的数据
- 语法:数组.concat(值1,值2,值3)
- 返回值:数组
let arr1 = [1,2,3,4,5]; let arr2 = [6,7,8,9] let str = arr1.concat(arr2); console.log(str);//[1, 2, 3, 4, 5, 6, 7, 8, 9,0]
注意:没有改变原始数组
1.16 copyWithin() ------ES6新增
复制数组的一部分然后放到同一数组的某个位置
- 语法:数组.copyWithin(插入的索引 , 复制开始索引 , 复制结束索引)
- 返回值:改变后的数组
let arr = [1, 2, 3, 4, 5]; let str = arr.copyWithin(1,3,4);//这个就是从索引3开始复制到索引4(不包括),然后添加到索引为1的位置 console.log(str); //[1, 4, 3, 4, 5]
注意:
- 改变了原始数组
- 参数一为必选,其他参数为可选(只有一个参数就是添加到指定索引,复制是整个数组;两个参数,第二个参数是开始复制索引,没有第三个参数会从开始索引复制到数组最后一个元素)
- 复制添加后整个数组的长度不变,所以就会导致复制添加的元素长度大于指定索引到数组最后一个元素索引的话,就会使复制添加元素后面几个元素被忽略(代码如下)
let arr = [1, 2, 3, 4, 5]; let str = arr.copyWithin(2,0,4); console.log(str); //[1, 2, 1, 2, 3] 复制的是整个数组,但是添加到数组的只有1,2,3
1.17 entries() ------ES6新增
返回一个新的Array Iterator对象
- 语法:数组.entries()
- 返回值:新的Array Iterator对象
let arr = [1, 2, 3, 4, 5]; let str = arr.entries(); let str1 = str.next().value let str2 = str.next().value; console.log(str);//Array Iterator {} console.log(str1,str2); //(2) [0, 1] (2) [1, 2]
注意:没有改变原始数组
1.18 fill() ------ES6新增
向数组中某一段位置填充指定数据
- 语法:数组.fill( 填充的数据, 开始索引 , 结束索引)
- 返回值:改变后的数组
let arr = [1, 2, 3, 4, 5]; let str = arr.fill(6,2,4); console.log(str); //[1, 2, 6, 6, 5] //不包含结束索引 //不指定开始结束索引会填充整个数组 //不指定结束索引会从开始索引填充到数组最后一个元素
注意:改变了原始数组
1.19 find() 和 findIndex() ------ES6新增
1.19.1 find()
找到数组中满足回调函数的第一个元素
- 语法:数组.find( 回调函数(处理的元素,下标,数组本身){},回调函数使用的this值)
- 返回值:满足条件的元素(没有返回undefined)
let arr = [1, 2, 3, 4, 5]; let str = arr.find((function(value,index,arr){console.log(value,index); return value>3})); console.log(str); //4
注意:没有改变原始数组
1.19.2 findIndex()
找到数组中满足回调函数的第一个元素的索引
- 语法:数组.findIndex( 回调函数(处理的元素,下标,数组本身){},回调函数使用的this值)
- 返回值:满足条件的第一个元素的索引(没有返回-1)
let arr = [1, 2, 3, 4, 5]; let str = arr.findIndex((function(value,index,arr){console.log(value,index); return value>3})); console.log(str); //3
注意:没有改变原始数组
1.20 from() ------ES6新增
将伪数组或可迭代对象经过指定处理转为一个新数组
- 语法:Array.from( 伪数组 , 回调函数 , 回调函数使用的this值)
- 返回值:处理后的新数组
let str1 = Array.from('12345');//['1', '2', '3', '4', '5'] let str2 = Array.from([1,2,3],(function(value,index,arr){console.log(value,index); return value*=3}))//[3, 6, 9]
1.21 includes() ------ES6新增
判断数组中是否包含指定的数据
- 语法:数组.includes(查找的元素 , 从哪开始找)
- 返回值:布尔值
let arr = [1, 2, 3, 4, 5]; let str = arr.includes(3) console.log(str); //true
注意:没有改变原始数组
1.22 keys() ------ES6新增
返回一个包含数组中每个索引键的Array Iterator对象
- 语法:数组.keys()
- 返回值:新的Array Iterator对象
let arr = [1, 2, 3, 4, 5]; let str = arr.keys(); for (const key of str) { console.log(key); //0,1,2,3,4 } console.log(str);//Array Iterator {}
注意:没有改变原始数组
1.23 values() ------ES6新增
返回一个包含数组中每个索引值的Array Iterator对象
- 语法:数组.values()
- 返回值:新的Array Iterator对象
let arr = [1, 2, 3, 4, 5]; let str = arr.values(); for (const value of str) { console.log(value); //1,2,3,4,5 } console.log(str);//Array Iterator {}
注意:没有改变原始数组
1.24 of() ------ES6新增
创建一个包含指定元素的数组
- 语法:Array.of(值1 , 值2 , 值3)
- 返回值:数组
let str = Array.of(7,6,5,4,3,2,1) console.log(str);//[7, 6, 5, 4, 3, 2, 1]
注意:Array(5)是创建一个长度为5的空数组,Array.of(5)是创建一个数组包含一个元素5
1.25 reduce() 和 reduceRight() ------ES6新增
1.25.1 reduce()
数组求和
- 语法:数组.reduce(回调函数(累加器,处理的元素,下标,数组本身){},首次累加器的值)
- 返回值:累加器处理的结果
let arr = [1, 2, 3, 4, 5]; let str = arr.reduce(function(sum,value,index){console.log(sum,value,index); return sum+=value},0) console.log(str);//15
注意:没有改变原始数组
1.25.2 reduceRight()
与reduce用法相同,从后往前累加求和
1.26 flat() 和 flatMap() ------ES10新增
1.26.1 flat()
深度递归,扁平化数组
- 语法:数组.flat(提取嵌套的深度,默认为1)
- 返回值:扁平化后新数组
let arr = [1, [2, 3, 4], 5]; let str = arr.flat(); console.log(str);//[1, 2, 3, 4, 5] let arr = [1, [[2, 3], 4], 5]; let str1 = arr.flat(); let str2 = arr.flat(2); console.log(str1);//[1, Array(2), 4, 5] console.log(str2);//[1, 2, 3, 4, 5]
注意:没有改变原始数组
1.26.2 flatMap()
数组每个元素执行回调函数,相当于执行map方法,然后返回值在执行flat方法
- 语法:数组.flatMap(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值)
- 返回值:新数组
let arr = [1, [2, 3, 4], 5]; let str = arr.flatMap(function(value,index){console.log(value,index); return value*2}); console.log(str);//[2, NaN, 10] 这个NaN是下标为1的数组乘2的结果
注意:没有改变原始数组
总结:
方法 | 语法 | 是否改变数组 | 版本 |
---|---|---|---|
jion() | 数组.join() | 否 | ES5以下 |
shift()与pop() | 数组.shift() 数组.pop() | 是 | ES5以下 |
unshift()与push() | 数组.unshift(‘值1’,‘值2’) 数组.push(‘值1’,‘值2’) | 是 | ES5以下 |
sort() | 数组.sort(回调函数) | 是 | ES5以下 |
reverse() | 数组.reverse(回调函数) | 是 | ES5以下 |
concat() | 数组1.concat(数组2) | 否 | ES5以下 |
slice() | 数组.slice(开始索引,结束索引) | 否 | ES5以下 |
splice() | 数组.splice(索引,删除的个数,添加的数据) | 是 | ES5以下 |
toString() | 数组.toString() | 否 | ES5以下 |
indexOf()与lastIndexOf() | 数组.indexOf(‘查询的元素’,‘从哪个位置找’) 数组.indexOf(‘查询的元素’,‘从此位置开始逆向查找’) | 否 | ES5 |
forEach() | 数组.forEach(回调函数( '处理的元素' , '下标' , '数组本身'){},回调函数使用的this值) | 否 | ES5 |
some() | 数组.some(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值) | 否 | ES5 |
map() | 数组.map(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值) | 否 | ES5 |
filter() | 数组.filter(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值) | 否 | ES5 |
every() | 数组.every(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值) | 否 | ES5 |
concat() | 数组.concat(值1,值2,值3) | 否 | ES5 |
copyWithin() | 数组.copyWithin(插入的索引 , 复制开始索引 , 复制结束索引) | 是 | ES6 |
entried() | 数组.entries() | 否 | ES6 |
fill() | 数组.fill( 填充的数据, 开始索引 , 结束索引) | 是 | ES6 |
find()与findIndex() | 数组.find( 回调函数(处理的元素,下标,数组本身){},回调函数使用的this值) 数组.findIndex( 回调函数(处理的元素,下标,数组本身){},回调函数使用的this值) | 否 | ES6 |
from() | Array.from( 伪数组 , 回调函数 , 回调函数使用的this值) | ES6 | |
includes() | 数组.includes(查找的元素 , 从哪开始找) | 否 | ES6 |
keys()与value() | 数组.keys() 数组.values() | 否 | ES6 |
of() | Array.of(值1 , 值2 , 值3) | ES6 | |
reduce()与reduceRight() | 数组.reduce(回调函数(累加器,处理的元素,下标,数组本身){},首次累加器的值) 数组.reduceRight(回调函数(累加器,处理的元素,下标,数组本身){},首次累加器的值) | 否 | ES6 |
flat()与flatMap() | 数组.flat(提取嵌套的深度,默认为1) 数组.flatMap(回调函数(处理的元素,下标,数组本身){},回调函数使用的this值) | 否 | ES10 |