数组方法
参考《javaS高级程序设计》,总结了以下关于数组的一些方法,如有理解不当,请各位大佬温柔指正
1、判断方法
(1)arr instanceof Array true/false
(2)Array.isArray(arr) true/false
2、转换方法
(1)arr.toString() //arr每一项以逗号拼接
let arr=[]
arr.toString()//""
arr = [[1,2,3,4],1,5,[1,5,3]]
arr.toString()//"1,2,3,4,1,5,1,5,3"
(2)arr.valueOf()//按照原来的数组输出
arr=[]
arr.valueOf()//[]
arr=[1,2,3,]
arr.valueOf()//[1, 2, 3]
(3)arr.toLocaleString()//大部分时候与tostring一样,但是,它为了取得每一项的值,执行每一项的toLocaleString方法
arr = [[1,2,3,4],1,5,[1,5,3]]
arr.toString()//"1,2,3,4,1,5,1,5,3"
3、其他方法
1、push() 入参个数不限,把入参添加在数组的后面,改变原数组,返回添加后的数组长度
let a=[]
let b=a.push(1,2,2)
console.log(a,b)//[1,2,2],3
2、pop() 不用传入参,删除最后一项,返回被删除的项,改变原数组
let a=[1, 2, 3, 5, 3]
let b = a.pop()
console.log(a,b)// [1, 2, 3, 5],3
3、shift() 不用传参,删除第一项,返回被删除的项,改变原数组
let a=[1, 2, 3, 5, 3]
let b=a.shift()
console.log(1,[2,3,5,3])
3、unshift() 入参个数不限,把入参添加在数组的前面,改变原数组,返回添加后的数组长度
var arr = [1,2,3]
let b = arr.unshift()
console.log(b,arr)//3,[1,2,3]
let c = arr.unshift(0,1)
console.log(c,arr)//[0,1,1,2,3]
4、reserve(),数组倒序,返回原数组的倒序,改变原数组
let arr=[1,2,3]
let brr = arr.reverse()
console.log(arr,brr)//[3,2,1],[3,2,1]
5、sort(),排序,改变原数组,返回与改变后的原数组
let arr=[5,0,15,5,2]
arr.sort()//(5) [0, 15, 2, 5, 5]
arr.sort((a,b)=>a-b)//[0, 2, 5, 5, 15]
arr.sort((a,b)=>b-a)//[15, 5, 5, 2, 0]
6、concat(),合并数组,入参不限,将参数中的么一项添加到副本中,返回一个副本
let arr = [0, 15, 2, 5, 5]
f=arr.concat()// [0, 15, 2, 5, 5]
f=f=arr.concat(1,[1,2,[1,2,3,4]])//[1,0, 15, 2, 5, 5, 1, 2, Array(4)]
7.slice(star,end),数组的切割方法,从下标为star截取到下标end,含头不含尾。返回切割下来项组成的数组不改变原数组
let arr= [0, 15, 2, 5, 5]
let brr=arr.slice(1,1)//[],头尾没有差值返回[]
let crr=arr.slice(1,3)// [15, 2]
let drr=arr.slice(-2)//[5,5]
let err=arr.slice(2,0)//[],头大于尾
8、splice(star,number,relace…),数组最强大的方法,插入,切割替换,参数一,开始的下标,参数二:删除的个数,后面的是起始坐标开始插入的内容.返回删除的项组成的数组,
let arr=[1,2,3,4,5,6,6,5]
let brr = arr.splice(1,2,5,6,0,3)
console.log(brr,arr)//[2, 3],[1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
9、indexOf(),从开头开始寻找第一个等于查找目标的项的下标
let arr= [1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
arr.indexOf(6)//2
10、indexLastOf(),从结尾开始寻找第一个等于查找目标的项的下标
let arr= [1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
arr.indexOf(4)//5
11、filter(),过滤数组,语法:filter((item,index)=>{return …}),返回运行了给定函数之后返回true的项组成的数组
let arr=[1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
let brr = arr.filter(item=>itme>4)//[5, 6, 5, 6, 6, 5]
12、map(),对数组的每一项执行给定的执行函数,返回每次调用的结果组成的的数组
注意,返回结果数组的长度与原数组的长度是一致的,每一项都要返回,没写返回函数则返回undefined
let arr = [1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
brr = arr.map(item=>{if(item>4){return item}})
(10) [undefined, 5, 6, undefined, undefined, undefined, 5, 6, 6, 5]
brr = arr.map((item,index)=>{if(item>4){return item}else{return 0}})
(10) [0, 5, 6, 0, 0, 0, 5, 6, 6, 5]
13、forEach(),对数组的每一项执行给定的执行函数
let brr=[];
arr.forEach(item=>{brr.push(item+2)})
console.log(brr)//[3, 7, 8, 2, 5, 6, 7, 8, 8, 7]
14、reduce(),语法reduce((prev,cru,index,array)=>{return …},num)
有num的话第一次函数的执行,prev是num,cru是array[0],
没有num的话,第一次函数的执行,prev是array[0],cru是array[1],
之后的prev是上一次执行函数的return 值
//例:求和
let arr=[1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
var sun = arr.reduce((prev,cru,index,array)=>{console.log(prev,cru,index);return prev+cru})
console.log(sum)//41
15、reduceRight和reduce差不多,只是方向不一样
ES6新增
16、every(),检测数组是否每一项都符合,语法:arr.every((item)=>{return …}),遍历arr,每一项都返回true,则为true,有一项返回false都返回false
let arr = [1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
let a = arr.every(item=>item>=0)//true
let b = arr.every(item=>item>0)//false
17、some()检测数组是否至少有一项符合,语法:arr.some((item)=>{return …}),遍历arr,每一项都返回false,则为false,有一项返回true都返回true
let arr = [1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
let a = arr.some(item=>item<=0)//true
let b = arr.some(item=>item<0)//false
18、find(),语法:arr.find((item,index,array)=>{return …}),方法返回通过测试(函数内判断为true)的数组的第一个项的值,没有则返回undefined
let arr=[{name:'cc',age:'19'},{name:'ct',age:'18'}]
const item = arr.find((item,index,array) => item.name == "ct");//{name:'ct',age:'18'}
arr.find((item,index,array) => item.name == "tt");//undefined
19、findInde(),语法:arr.findIndex((item,index,array)=>{return …}),方法返回通过测试(函数内判断为true)的数组的第一个元素的值,如果没有返回-1
let arr = [1, 5, 6, 0, 3, 4, 5, 6, 6, 5]
let index0 = arr.findIndex(item=>item==7)
20、includes(),判断数组中是否含有某项,有则返回true,否则为false
console.log([1,3].includes(1))//true
console.log([1,3].includes(2))//false