1. forEach(频率高)
介绍: (1)循环遍历的方法:罗列出数组内的元素(可直接看见的) (2)forEach 接受一个函数作为参数(回调函数),回调函数会有两个形参(示例的 item 和 i);第一个形参:数组当前循环项(item),第二个形参:数组当前循环项的索引(i) (3)forEach 返回值为(undefined); forEach 中可改变引用类型中的属性值,但是不可以改变基本类型的值 :js数组forEach方法的赋值问题 正常使用:const arr = [ 1 , { name : 'zs' } , ( ) => 'ls' , null , undefined , NaN , true , 'ww' , [ 'lb' ] ] ;
arr. forEach ( ( item, i ) => {
console. log ( item, i)
} )
效果如下图: 跳出循环:不支持 continue 和 break;但可以使用try catch实现跳出循环;const arr = [ 1 , { name : 'zs' } , ( ) => 'ls' , null , undefined , NaN , true , 'ww' , [ 'lb' ] ] ;
try {
arr. forEach ( ( item, i ) => {
console. log ( item, i)
if ( ! item) throw item
} )
} catch ( error) {
console. log ( ` 抛出错误: ${ error} ` )
}
console. log ( 'try catch 外同步函数' )
效果如下图:
2. push(频率高)(方向与 unshift 相反)
介绍 (1)往数组末尾添加一个或多个元素;并返回当前数组的长度(length); (2)会改变原数组 正常使用
const arr = [ 'zs' ] ;
console. log ( arr. push ( 999 ) ) ;
console. log ( arr) ;
console. log ( arr. push ( 'zs' , [ ] , { } , ( ) => { } , true , undefined , null ) ) ;
console. log ( arr) ;
配合 拓展运算符
const arr = [ 'ls' ] ;
const otherArr = [ 9 , 8 , 'zs' ] ;
arr. push ( ... otherArr) ;
console. log ( arr)
3. pop (频率低)(方向与 shift 相反)(可以记不住但是必须知道有这个功能)
介绍 (1)移除数组的最后一个元素,并返回被移除的元素; (2)会改变原数组 使用
const arr1 = [ 1 , 2 , 3 , 4 , 5 , 'cs' ] ;
const arr2 = [ 2 , ( ) => { } ] ;
const arr3 = [ 3 , { } ] ;
const arr4 = [ 4 , null ] ;
const arr5 = [ 5 , undefined ] ;
console. log ( arr1. pop ( ) ) ;
console. log ( arr2. pop ( ) ) ;
console. log ( arr3. pop ( ) ) ;
console. log ( arr4. pop ( ) ) ;
console. log ( arr5. pop ( ) ) ;
console. log ( arr1) ;
console. log ( arr2) ;
console. log ( arr3) ;
console. log ( arr4) ;
console. log ( arr5) ;
4. shift(频率低)(方向与 pop 相反)(可以记不住但是必须知道有这个功能)
介绍 (1)移除数组的第一个元素,并返回被移除的元素; (2)会改变原数组 使用
const arr1 = [ 'cs' , 1 , 2 , 3 , 4 , 5 ] ;
const arr2 = [ ( ) => { } , 2 ] ;
const arr3 = [ { } , 3 ] ;
const arr4 = [ null , 4 ] ;
const arr5 = [ undefined , 5 ] ;
console. log ( arr1. shift ( ) ) ;
console. log ( arr2. shift ( ) ) ;
console. log ( arr3. shift ( ) ) ;
console. log ( arr4. shift ( ) ) ;
console. log ( arr5. shift ( ) ) ;
console. log ( arr1) ;
console. log ( arr2) ;
console. log ( arr3) ;
console. log ( arr4) ;
console. log ( arr5) ;
5. unshift(方向与 push 相反)(可以记不住但是必须知道有这个功能)
介绍 (1)往数组首位添加一个或多个元素;并返回当前数组的长度(length); (2)会改变原数组 正常使用
const arr = [ 'cs' ] ;
console. log ( arr. unshift ( 999 ) ) ;
console. log ( arr) ;
console. log ( arr. unshift ( 'zs' , [ ] , { } , ( ) => { } , true , undefined , null ) ) ;
console. log ( arr) ;
配合 拓展运算符
const arr = [ 'ls' ] ;
const otherArr = [ 9 , 8 , 'zs' ] ;
arr. unshift ( ... otherArr) ;
console. log ( arr)
6. indexOf(频率高)(与 includes 类似)
介绍: (1)查找指定的元素并返回找到元素的索引,未找到则返回-1; (2)第一个参数:指定查找的元素;第二个参数:开始查找的索引(数组是索引,字符串是长度) 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log ( arr. indexOf ( 'ww' ) ) ;
console. log ( arr. indexOf ( 'ww' , 2 ) ) ;
console. log ( arr. indexOf ( 'ww' , 3 ) ) ;
console. log ( arr. indexOf ( 'zb' ) ) ;
7. includes (频率高)(与 indexOf 类似)
介绍: (1)查找数组是否包含指定值,包含则返回true,不包含则返回false; (2)第一个参数:指定的元素;第二个参数:开始查找的索引(数组是索引,字符串是长度) 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log ( arr. includes ( 'ww' ) ) ;
console. log ( arr. includes ( 'ww' , 2 ) ) ;
console. log ( arr. includes ( 'ww' , 3 ) ) ;
console. log ( arr. includes ( 'zb' ) ) ;
8. concat(频率低且不建议使用,合并一般使用展开运算符:… )
介绍: (1)可合并多项数组元素; (2)接受多个参数,如果是数组:则会把数组第一维([1, 2, [3, 4]]: 1和2 是一维数据, 3和4是二维数据)提取出来合并,如果不为数组:直接添加进合并数组里面; (3)不改变原数组;合并的时候会重新生成数组 ;并不是原有数组添加;如下示例中的原有arr;重新生成newArr 使用
const arr = [ 1 ] ;
const newArr = arr. concat ( 1 , { } , [ 1 , 3 , 4 , ( ) => { } ] , ( ) => { } , undefined , [ [ 1 ] , [ 2 ] ] )
console. log ( newArr)
以 es6 的 展开运算符方式
const arr = [ 1 , 2 ] ;
const newArr = [ ... arr, 1 , { } , ( ) => { } , ... [ 1 , 3 , 4 , ( ) => { } ] ]
console. log ( newArr)
9. join(频率高)
介绍: (1)以自定义形式把数组转换成字符串; (2)第一个参数:指定要使用的分隔符。如果省略 该参数,则使用逗号作为分隔符 。 (3)不改变原数组 ;返回一个新值 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log ( arr. join ( ) ) ;
console. log ( arr. join ( '-' ) ) ;
console. log ( arr. join ( '-+-' ) ) ;
10. slice(建议频率高)
介绍 (1)选取数组的一部分,并返回一个新数组。 (2)第一个参数 :规定从何处开始选取。如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取;slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。第二个参数 :规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。(建议看完后再看示例) (3)不改变原数组 ;返回一个新值 (4)开始选取的会被选中,结束选取的不会被选中 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log ( arr. slice ( 1 ) ) ;
console. log ( arr. slice ( 1 , 3 ) ) ;
console. log ( arr. slice ( - 2 ) ) ;
console. log ( arr. slice ( - 2 , - 1 ) ) ;
11. splice(频率高)
介绍 (1)从数组中添加或删除元素。 (2)第一个参数 :从数组何处开始删除或添加;第二个参数 :删除多少个;未规定则以第一个参数为起点删除元素直至数组末端;后续N个参数 :要添加到数组的新元素;位置为第一个参数 (3)返回:如果删除一个元素,则返回一个元素的数组。 如果未删除任何元素,则返回空数组。 (4)会改变原数组 使用
const arr1 = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
const arr2 = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
const arr3 = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
const arr4 = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log ( arr1. splice ( 2 ) ) ;
console. log ( arr1) ;
console. log ( arr2. splice ( 2 , 1 ) ) ;
console. log ( arr2) ;
console. log ( arr3. splice ( 2 , 0 , 'add1' , 'add2' , 'add3' ) ) ;
console. log ( arr3) ;
console. log ( arr4. splice ( 2 , 2 , 'add1' , 'add2' , 'add3' ) ) ;
console. log ( arr4) ;
12. reverse(可以记不住这个名字但是必须记住有这个功能)
介绍 (1)反转原数组的元素顺序。并返回原数组 (2)会改变原数组 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log ( arr. reverse ( ) ) ;
console. log ( arr) ;
13. sort(建议频率高)
介绍 (1)对原数组的元素进行排序。返回原数组;默认排序顺序为按字母升序(当数字是按字母顺序排列时"40"将排在"5"前面)。 (2)接受一个函数进行排序处理 (3)会改变原数组 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' , 40 , 5 , '60' , 7 ] ;
const numbArr = [ 53 , 234 , 23 , 34 , 99 , 24 ] ;
console. log ( arr. sort ( ) ) ;
console. log ( arr) ;
const fn = function ( a, b ) {
return a - b
}
console. log ( numbArr. sort ( fn) )
console. log ( numbArr. sort ( ( a, b ) => a - b) )
console. log ( numbArr. sort ( ( a, b ) => b - a) )
14. flat(频率低)
介绍 (1)将多维数组([1, [2], [3], [ [4], [5] ] ]:1在一维,2和3在2维,4和5在三维,依次类推)转换成指定维度数组;默认只转一次; (2)第一个参数:进行N次转换(一次转换一维,N次转N维) (3)不改变原数组 (4)进阶:当浏览器提示 flat is not a function 的时候;莫慌 使用
const arr = [ 1 , [ 2 ] , [ 3 ] , [ [ 4 ] , [ 5 ] ] ] ;
console. log ( arr. flat ( 1 ) ) ;
console. log ( arr) ;
console. log ( arr. flat ( Infinity ) ) ;
15. map(建议频率高)
介绍 (1)通过指定函数处理数组的每个元素,并返回处理后的数组。 (2)第一个参数:回调函数,具有两个形参(第一个:当前循环项, 第二个:当前循环项索引);回调函数需有返回值(返回值则是数组当前循环项重构内容,不写 return 则为 undefined) (3)不改变原数组 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log (
arr. map ( ( item , i ) => {
return {
name : item,
idCard : i
}
} )
)
16. find(了解有印象就行)
介绍 (1)返回满足条件(传入的函数)的第一个值; (2)不会改变原数组 使用const arr1 = [ 12 , 16 , 14 , 19 , 30 , 99 , 50 ] ;
const arr2 = [
{ name : 'zs' , age : 18 } ,
{ name : 'ls' , age : 12 } ,
{ name : 'ww' , age : 10 } ,
]
console. log ( arr1. find ( v => v> 18 ) ) ;
console. log ( arr1) ;
console. log ( arr2. find ( v => v. age> 9 ) ) ;
console. log ( arr2. find ( v => v. name === 'ls' ) ) ;
console. log ( arr2) ;
17. findIndex (了解有印象就行)
介绍 (1)返回满足条件(传入的函数)的第一个索引 (2)不会改变原数组 使用const arr1 = [ 12 , 16 , 14 , 19 , 30 , 99 , 50 ] ;
const arr2 = [
{ name : 'zs' , age : 18 } ,
{ name : 'ls' , age : 12 } ,
{ name : 'ww' , age : 10 } ,
]
console. log ( arr1. findIndex ( v => v> 18 ) ) ;
console. log ( arr1) ;
console. log ( arr2. findIndex ( v => v. age> 9 ) ) ;
console. log ( arr2. findIndex ( v => v. name === 'ls' ) ) ;
console. log ( arr2) ;
18. filter(建议频率高)
介绍 (1)过滤掉数组中满足条件的元素 (2)第一个参数: 回调函数,具有两个形参(第一个:当前循环项, 第二个:当前循环项索引);回调函数需有返回值作为判断依据(true 或者 false) (3)返回:返回被过滤后的数组;如果没有满足条件的则返回空数组 (4)不会改变原数组 使用
const arr = [ 'zs' , 'ls' , 'ww' , 'zl' , 'gq' ] ;
console. log (
arr. filter ( ( item , i ) => {
console. log ( i)
return item === 'zs' || item === 'zl'
} )
)
console. log ( arr)
19. reduce(建议频率高)
介绍 (1)将数组元素计算为一个值(从左到右)。 (2)第一个参数 : 回调函数,具有两个形参(第一个:前面项处理的结果, 第二个:即将被处理项);回调函数返回处理逻辑;第二个参数 :处理项的初始值,默认为undefined; (3)不改变原数组 使用
const arr1 = [ 53 , 234 , 23 , 34 , 99 , 24 ] ;
const arr2 = [ '53' , '234' , '23' , '34' , '99' , '24' ] ;
const arr3 = [ [ 'zs' ] , [ 'ls' ] ] ;
console. log ( arr1. reduce ( ( pre, next ) => pre + next) ) ;
console. log ( arr2. reduce ( ( pre, next ) => pre + next) ) ;
console. log ( arr1) ;
console. log ( arr2) ;
console. log ( arr3. reduce ( ( pre, next ) => {
pre[ next[ 0 ] ] = next;
return pre;
} , { } ) )
lodash插件中的keyBy功能简单实现(具体细节不考虑)
const arr = [
{
name : '张三' ,
age : 16
} ,
{
name : '李四' ,
age : 17
} ,
{
name : '王五' ,
age : 18
} ,
]
const keyBy = ( array, key ) => {
return array. reduce ( ( pre, next ) => {
pre[ next[ key] ] = next;
return pre;
} , { } )
}
console. log (
keyBy ( arr, 'name' )
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
参考文档
菜鸟教程-数组篇