数组中常⽤的⾼阶⽅法
⼀。操作⽅法
如果传递的参数是⼀个数组或者多个数组,那么会将多个数组的每⼀个项都添加到原来的数组后⾯,然后返回这个数组,原数组不变。
例如:
2.slice
slice⽅法接受两个参数,
接受⼀个参数的时候,如slice(n)返回第n+1到尾项所有项组成的数组
接受两个参数的时候,如slice(n,m)返回第n+1到m所有项组成的数组
3.spice⽅法:
slice⽅法是最强⼤的数组操作⽅法,
可以随意删除任意位置的项或插⼊新增项
1),删除.接受两个参数,第⼀个参数是起点,第⼆个参数是删除的项数,然后返回删除的项组成的数组,如
2).替换
接受三个以上的参数,第⼀个参数表⽰删除的起始位置,第⼆个参数为被替换的项数,其余的项为要插⼊的项,返回被替换的项组成的数组
3)插⼊第⼀个参数为起始位置,第⼆个参数为0,其余为要插⼊的项,返回⼀个空数组
⼆。位置⽅法
接受两个参数,查的项和查的起始位置,返回第⼀个查到的项的位置
从前往后检索indexOf()
从后往前检索lastIndexOf()
数组中常⽤的⾼阶⽅法:
foreach map filter reduce some every
在这些⽅法中都是对数组中每⼀个元素进⾏遍历操作,只有foreach是没有返回值的,reduce是的回调函数中,是有四个参数的,下⾯说⼀
下他们的基本⽤法
map: 映射,可以对数组中每个元素进⾏操作,并逐⼀返回,⽣成⼀个理想的新数组
arr.map(function(item,index,arr){
..............
})
//map⽅法内可以传⼊⼀个js⾃带的字段处理函数,需要注意的是传⼊的函数参数问题
let arr1 = [1,4,9]
let newArr1 = arr1.map(Math.sqrt) //Math.sqrt() 只接受⼀个参数,所以默认接受的是数组内每⼀个元素传⼊对数组的每⼀个元素进⾏开放
console.log(newArr1); // [1,2,3]
let arr2 = [1,4,9]
let newArr2 = arr2.map(parseInt)
console.log(newArr2); // [1,NaN,NaN] 因为parseInt()可以接受两个参数,第⼀个参数是处理的数,第⼆个参数是转换的进制,在这⾥将数组中的下标当做了第
//map可以对数组中的每个对象进⾏处理
let arr3 = [{a:1},{b:2},{c:3}]
// 对数组中的每个对象元素增加⼀个y属性,并且将每个新对象返回,组成⼀个新的数组
let newArr3 = arr3.map(item => {
item.y = 0
return item
})
console.log(newArr3); //[{a:1,y:0},{b:2,y:0},{c:3,y:0}]
//返回对象中指定的字段,组成新数组
let arr4 = [{a:1,x:2},{a:2,x:2},{a:3,x:2}]
let newArr4 = arr4.map(item => item.a)
console.log(newArr4); //[1, 2, 3]
filter:过滤(当返回值为ture时,才会返回当前处理的元素):
//过滤掉数组中不符合的元素
let arr = [1,2,3]
ler newArr = arr.map(item => return item > 1)
// 过滤掉数组中空项,转为布尔为false的元素
let arr = [1,'',undefined,2,3]
let newArr = arr.filter(item => item)
filter过滤对象数组/
/ 过滤掉数组内不符合条件的对象
let arr = [{a:1},{a:2},{a:3}]
let newArr = arr.filter(item => item.a > 1)
console.log(newArr); // [{a:2},{a:3}]
//过滤掉指定的空项,将没有x属性的对象过滤掉
let arr = [{a:1,x:2},{b:1},{c:1,x:3}]
let newArr = arr.filter(item => item.x)
console.log(newArr);
// 数组去重
var arr = [1,2,3,1,2,5,4,3,3,1]
var newArr = arr.filter((item,index,arr)=>{
return arr.indexOf(item) === index
})
console.log(newArr)
reduce:
接收⼀个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为⼀个值。
callback(执⾏数组中每个值的函数,包含四个参数)
previousValue(上⼀次调⽤回调函数返回的值,或者是提供的初始值(initialValue))
currentValue(数组中当前被处理的元素)
index(当前元素在数组中的索引)
array(调⽤reduce的数组)
reduce可以传⼀个初始值,也可以不传,直接,将previousValue当做初始值
初始值可以传任何类型的值
// 不传递初始值,直接以数组内的第⼀个元素为初始值。没传递初始值时,第⼀个参数就是上⼀次回调返回的值,这⾥的init依次是:1 3 6 let arr = [1,2,3,4]
let data = duce((init,now) => {
return init+now
})
// data 为10
// 传递⼀个Number初始值,
//init第⼀次是初始值10,之后每次都是上⼀次回调函数返回的值:
10 11 13 16
let arr = [1,2,3,4]
let data = duce((init,now) => {
return init+now
},10)
//data为20
//传递⼀个Object初始值. 使对象⾥的属性和某数组内的元素累加
let arr = [1,2,3,4]
let data = duce((init,now) => {
init.sum = init.sum + now
return init
},{sum:2})
console.log(data); // {sum:12}
//对象内的某个属性进⾏累加
let arr = [
{a:1,name:'a'},
{a:2,name:'b'},
{a:3,name:'c'},
]
let data = duce((init,now) => {
return init + now.a
},0)
console.log(data); // 6
// 查看某字符串,每个字符出现的次数
var str = 'abccacbbaacaa'
var obj = str.split('').reduce((init,now) => {
init[now] ? ++init[now] : init[now] = 1
return init
},{})
console.log(obj); //{a: 6, b: 3, c: 4}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论