JS数组常用方法

**数组常用方法**

==>js 自带的一些操作数组的方法

==>数组方法的使用格式,必须是数组.xxx()

==>数组和伪数组的区别

->length 和索引都一样,循环遍历都一样,长得也一样

->唯独数组常用方法,伪数组用不了

==>push()

->语法:数组.push(数据 1,数据 2,数组 3...)

->作用:把所有的参数按照顺序加到数组的末尾位置

->返回值:追加以后数组的长度

->直接操作原始数组

->可以追加数组

var arr=[1,2,3,4,5]

//arr[5]=123

//arr[6]=[10,20] 变成二维数组

var res=arr.push(123,[10,20])

==>pop()

->语法:数组.pop()

->作用:删除数组的最后一个数据

->返回值:被删除的数据

->直接操作数组

var arr=[1,2,3,4,5]

var res=arr.pop()

//res 得到的是被删除的数据

==>unshift()

->语法:数组.unshift(数据 1,数据 2,数组 3...)

->作用:从数组的最前面插入一些数据

->返回值:插入后的数组长度

->直接操作数组

var arr=[1,2,3,4,5]

var res=arr.unshift(123)

**面试题**

**push 和 unshift 的区别**

对性能的消耗不一样,push 方法在末尾追加和前面的数据没有关系

unshift 是从前面追加,原先数据每一个往后顺延需要消耗性能,因为对每一个数据都有操作

==>shift()

->语法:数组.shift()

->作用:删除数组的最前面的数据

->返回值:被删除的数据

->直接操作数组

var arr=[1,2,3,4,5]

var res=arr.shift()

res:被删除的数据

==>reverse()

->语法:数组.shift()

->作用:反转数组

->返回值:反转后的数组

->直接操作数组

var arr=[1,2,3,4,5]

arr.shift()

==>sort()

==>语法:

-->1.arr.sort()

->按照每一个数据中的每一个数据的 ASCII 码进行排序

var arr=[1,2,3,4,5,10,11]

arr.sort()

console.log(arr) //1,10,11,2,3,4,5 按位排序

-->2. 升序排列 arr.sort(function(a,b){

return a-b;

})

var arr=[1,2,3,4,5,10,11]

arr.sort(function(a,b){

return a-b;

})

console.log(arr) //1,2,3,4,5,10,11

-->2. 降序排列 arr.sort(function(a,b){

return b-a;

})

var arr=[1,2,3,4,5,10,11]

arr.sort(function(a,b){

return b-a;

})

console.log(arr) //11,10,5,4,3,2,1

==>splice()

->语法:

1、数组.splice(开始索引,多少个)

->从开始索引,截取多少个

->第二个参数可以不写,直接到末尾

var arr=[1,2,3,4,5,10,11]

var res=arr.splice(1,2)

console.log(res)//2,3

console.log(arr)//1,4,5,10,11

2、数组.splice(开始索引,多少个,替换数据 1,替换数据 2...)

->把替换数据按照顺序插入到截取的位置

->**注意**:从那个索引开始删除,替换数据的第一个就插入哪个位置

var arr=[1,2,3,4,5,10,11]

var res=arr.splice(1,2,12)

console.log(res)//2,3

console.log(arr)//1,12,4,5,10,11

-->作用:

->1、截取数组

->2、替换新内容

-->返回值:一定是一个数组

->如果截取多个数组,数组里面有多个

->如果截取一个数组,数组里面只有一个

->如果一个都不截取,就是一个空数组

->直接操作原始数组

==>concat ()

->语法:数组.concat(数组 1,数据 2,...)

->作用:

1、如果参数是数组,就把数组拆开,里面每一项追加到原数组后面

2、如果参数数据,直接追加

->返回值:追加好的数组

->不改变原始数组

var arr=[1,2,3,4,5,10,11]

var res=arr.cocat(12,[20,21])

console.log(res)//1,2,3,4,5,10,11,12,20,21

console.log(arr)//1,2,3,4,5,10,11

==>concat ()

->语法:

1、数组.slice(开始索引,结束索引) //包前不包后

->第一个参数可以不写,表示从头

->第二个参数可以不写,表示到尾

var arr=[1,2,3,4,5,10,11]

var res=arr.slice(1,2)

console.log(res)//2

console.log(arr)//1,2,3,4,5,10,11

2、数组.slice(开始索引,结束索引) //包前不包后

->参数可以写一个负整数

->写一个负整数以后,表示 length+负整数 //-1 表示最后一个

var arr=[1,2,3,4]

var res=arr.slice(1,-1)

console.log(res)//1,2,3,4

console.log(arr)//1,2,3,4

->作用:获取数组里的某些数据

-->返回值:一个数组

->如果获取多个数组,数组里面有多个

->如果获取一个数组,数组里面只有一个

->如果一个都不获取,就是一个空数组

->不改变原始数组

==>join()

->语法:数组.join('连接符号') //连接符号默认值是逗号

->作用:把数组里面的每一个数据使用连接符号连接在一起

->返回值:是一个连接好的内容,是一个 string 类型

->直接操作数组

var arr=[1,2,3,4]

var res=arr.join('-')

console.log(res)//1-2-3-4

console.log(arr)//1,2,3,4

==>indexOf()

->语法:

1、数组.indexOf(数据)

var arr=[1,2,3,4]

var res=arr.indexOf(1)

console.log(res)//0

2、数组.indexOf(数据,开始索引)

var arr=[1,2,3,4]

var res=arr.indexOf(4,1)

console.log(res)//3

->作用:正向查看数组里面指定这个数据的索引

->返回值:

1、如果有这个数据,是第一个满足条件的数据的索引

2、如果没有这个数据,那么是-1

->直接操作数组

==>lastIndexOf()

->语法:

1、数组.lastIndexOf(数据)

var arr=[1,2,3,4]

var res=arr.lastIndexOf(1)

console.log(res)//3

2、数组.lastIndexOf(数据,开始索引)

var arr=[1,2,3,4]

var res=arr.lastIndexOf(4,0)

console.log(res)//0

->作用:反向查看数组里面指定这个数据的索引

->返回值:

1、如果有这个数据,是第一个满足条件的数据的索引

2、如果没有这个数据,那么是-1

3、注意:虽然是从后向前查找,但是索引还是正常索引

->直接操作数组

==>forEach()

->语法:数组.forEach(function (item,index,arr){ })

->item:数组的每一项

->index:数组的每一项的索引

->arr:原始数组

->作用:取代 for 循环,遍历数组

->返回值:没有返回值

var arr=[1,2,3,4]

var res=arr.forEach(function (item,index,arr){

//数组里有多少数据执行多少次

//函数每一次执行的时候,item 分别是数组里面的每一项

//函数每一次执行的时候,index 分别是数组里面的每一项的索引

//函数每一次执行的时候,arr 每一次都是原始数组

console.log(item,index,arr)

})

==>map()

->语法:数组.map(function (item,index,arr){ })

->item:数组的每一项

->index:数组的每一项的索引

->arr:原始数组

->作用:映射数组

->返回值:是一个新的数组

->里面是对原始数组没一个数组的操作

->返回数组值,一定和原始数组长度一样

==>不改变原始数组

var arr=[10,100,1000]

var res= arr.map(function (item,index,arr){

return item\*1.3

})

console.log(res) //13,130,1300

**map 底层封装**

1、准备一个新的数组

2、遍历原始数组,分别执行函数

3、把每一次函数执行的返回值放在新数组里面

4、把新数组当作 map 的返回值给出来

var arr=[10,100,1000];

function myMap(fn){

//fn 就是调用 myMap 的时候传递函数

只要写 fn()就是在调用书写 myMap 的时候传递的那个参数

var newArr=[];

//this 就是调用 myMap 的那个函数

//遍历调用 myMap 的数组

for(var i=0;i<this.length;i++){

//这里的代码会根据数组的长度来执行

//在 for 循环里面,this[i]就是数组的每一项

//在 for 循环里面,i 就是数组每一项的索引

var res=fn(this[i],i,this)

newArr.push(res)

}

return newArr

}

//当循环结束,newArr 就是里面有三个数据,分别是对原始数组每一个数据的操作

Array.prototype.myMap=myMap

var res=arr.myMap(function(item,index,arr){

return item\*1.3 //对原始数组每一个数据的操作  

})

console.log(res)

==>filter()

->语法:数组.filter(function (item,index,arr){ })

->item:数组的每一项

->index:数组的每一项的索引

->arr:原始数组

->作用:过滤原始数组中的数据,把满足条件的放在新数组里面

->返回值:新数组,里面是所有原始数组中满足条件的项

==>不改变原始数组

var arr=[10,20,30,40,50]

var res=arr.filter(function(item,index,arr){

return item>20

})

console.log(res)

//去重

var arr=[1,2,3,1,2,3]

var res=arr.filter(function(item,index){

return arr.indexOf(item)==index

})

console.log(res)

_底层原理_

1、准备一个新的数组

2、循环遍历原始数组

->数组有多少项,函数执行多少次

->每一回,如果返回值是 true,就把这一项放在新数组里面

->如果返回值是 true,就把这一项不放在新数组里面

3、把新数组当作 filter 的返回值给出来

函数第一次执行

==>item==10,return item>20,return false

==>10 这个函数不放在新数组里面

函数第三次执行

==>item==30,return item>20,return true

==>30 这个函数放在新数组里面

函数第五次执行

==>item==50,return item>20,return true

==>50 这个函数放在新数组里面

==>every()

->语法:数组.every(function (item,index,arr){ })

->item:数组的每一项

->index:数组的每一项的索引

->arr:原始数组

->作用:判断原始数组里面是不是每一个都满足条件

-->返回值:是一个布尔值

->如果原始数组中每一个都满足条件,返回 true

->如果原始数组中每一个都不满足条件,返回 false

==>不改变原始数组

_底层原理_

1、假设一个变量为 true,表示所有数据都满足条件

2、循环遍历数组

==>执行传递进来的函数

==>如果函数返回的是 true,循环继续

==>返回的是 false,那么假设改成 false,结束循环

3、循环结束以后,假设当作 every 的返回值

var flag=true

函数第一次执行

item===10,return item<40,return true

什么也不做,循环继续

函数第二次执行

item===20,return item<40,return true

什么也不做,循环继续

函数第三次执行

item===30,return item<40,return true

什么也不做,循环继续

函数第四次执行

item===40,return item<40,return false

吧 flag 赋值为 false

break 结束循环

var arr=[10,20,30,40,50]

var res=arr.every(function(item,index,arr){

return item<40

})

console.log(res)

==>some()

->语法:数组.some(function (item,index,arr){ })

->item:数组的每一项

->index:数组的每一项的索引

->arr:原始数组

->作用:判断数组里面是不是有某一个满足条件

-->返回值:是一个布尔值

->如果数组中有任意一个满足条件,返回 true

->如果数组中所有数据都不满足条件,返回 false

==>不改变原始数组

_底层原理_

1、假设一个变量为 false,表示所有数据都满足条件

2、循环遍历数组

==>执行传递进来的函数

==>如果函数返回的是 false,循环继续

==>返回的是 true,改变假设变量 ,结束循环

3、循环结束以后,把假设变量当作 some 的返回值

var flag=false

函数第一次执行

item===10,return item>10,return false

什么也不做,循环继续

函数第二次执行

item===20,return item>20,return true

把 flag 赋值为 true

break 结束循环

循环结束后,把 false 的值当作 some 方法返回值

var arr=[10,20,30,40,50]

var res=arr.some(function(item,index,arr){

return item>10

})

console.log(res)

==>copyWithin()

->语法:数组.copyWithin (目标位置,开始索引,结束索引)

->目标位置:替换内容时,从哪一个位置开始替换

->开始索引:数组哪一个索引位置开始当作替换内容,默认值为 0;

->结束索引:数组哪一个索引位置结束当作替换内容,默认是末尾

->包前不包后

->作用:使用数组里面的内容替换数组里面的内容

-->返回值:一个新的数组

->替换后的数组

==>不改变原始数组

var arr=[100,200,300,400,500]

var res=arr.copyWithin(0,1,2)

//第一个参数表示不管用什么替换都从 0 位置开始替换

//第二个参数 1,表示原始数组索引[1]位置开始替换

//第三个参数 2,表示原始数组索引[2]位置结束查找,包前不包后

console.log(res)//200,200,300,400,500

==>fill()

->语法:数组.fill(要填充的数据,开始索引,结束索引)

->要填充的数据:数据填充数组里面的每一位

->开始索引:从哪一个索引开始填充,默认值是 0

->结束索引:填充到哪一个索引位置,默认值是末尾

->前提:数组要有 length

->包前不包后

->作用:使用指定的数据填充数组

-->返回值:填充好的数组

->

var arr=new Array(30)

var res=arr.fill("123")

console.log(arr)

console.log(res)

==>includes()

->语法:数组.includes(数据)

->作用:查看数组是不是有某一个数据

-->返回值:一个布尔值

->有这个数据,返回 true

->没有这个数据,返回 false

var arr =[10,20,30,40,50]

var res=arr.includes(40)

console.log(res)//true

==>flat()

->语法:数组.flat(数字)

->表示扁平化多少层,默认是 1

-> 参数可以填写为 Infinity (无限)

->作用:拍平数组

-->返回值:拍平后的数组

var arr =[10,[20,30],40,50]

var res=arr.flat(Infinity)

console.log(res)//[10,20,30,40,50]

==>flatMap()

->语法:数组.flatMap(function (item,index,arr {}))

->表示扁平化多少层,默认是 1

->作用:拍平数组,只能拍一层

-->返回值:一个新的数组

->一边拍平,一边映射

var arr =[[10,20,30],[40,50]]

var res=arr.flatMap(function (item,index,arr) {

return item.filter(function (item){

return item%2===0

})

})

console.log(res)//[10,20,30,40,50]

==>find()

->语法:数组.find(function (item){})

->作用:根据条件找到数组里面满足条件的数据

-->返回值:找到的那个**数据**

var arr =[10,20,30,40,50]

var res=arr.find(function(item){

return item>20

})

console.log(res)//数据 30

==>findIndex()

->语法:数组.findIndex(function (item){})

->作用:根据条件找到数组里面满足条件的数据

-->返回值:找到的那个**数据的索引**

var arr =[10,[20,30],40,50]

var res=arr.findIndex(function(item){

return item>20

})

console.log(res)//索引 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值