数组方法整理
1. 清空数组
let arr = [1,2,3]
// 方法一
arr.length = 0
// 方法二
arr = []; //创建了新的空间
2. 数组复制copyWithin()
copyWithin(targt,start,end)
参数1targt: 赋值到指定索引值位置
参数2start:要复制起点索引值
参数3end:要复制的截至位置索引值
let arr = [4,6,2,3,1,5,9]
arr.copywithin(1,3,5) // [4,3,1,3,1,5,9]
// 起始的范围[3,5)
3. 数组查找
(1) indexOf()
let arr=[1,2,3,4,5]
// 严格查找===
arr.indexOf('1')// -1
arr.indexOf(1)// 0
(2) includes()
let arr=[1,2,3,4,5]
arr.includes('1')// false
arr.includes(1)// true
(3) find()
/*
* @param {array} arr 要查找的数组
* @param{function} callback 要执行的函数
* @return 返回找到值的整体
*/
find(arr,callback){
for(const value of arr){
if(callback(value)){
return value
}
}
return undefined;
}
find(arr,(value)=>{
return value===0
})
find(callback){
for(const value of this){
if(callback(value)){
return value
}
}
return undefined;
}
arr.find((value)=>{
return value===0
})
(4) findIndex()
返回找到值的索引值
4. 迭代器
let arr = [1,2,3,4,5]
let key = arr.keys();
let value = arr.values();
let entries = arr.entries();
key.next()// 0
value.next()// 1
entries.next()// {done: false,value:[0,1]}
5. every()
判断一组数据是否都为真(&&)
// 判断该班级学生成绩是否都及格
let achievement = [80,90,60,50,89,78,67,56]
let res = achievement.every((key)=>{
return key>=60
})
console.log(res?"及格":"未及格")
6. some()
判断一组数据中是是否存在真(||)
<input type='text' />
let matchArr = ['小王','小红']
let inp = document.querySelector('input');
let res = matchArr.some(item=>{
return inp.innerText. indexOf(item)!==-1;
})
let span = document.createElement('span');
span.innerText = res?'':'不存在matchArr中的数据'
inp.appendChild(span);
7.filter()
/*
* @param {array} arr 要查找的数组
* @param{function} callback 要执行的函数
* @return 返回筛选出的数组
*/
filter(arr,callback){
let newArray = [];
for(const value of arr){
if(callback(value)){
newArray.push(value);
}
}
return newArray;
}
let arr = [1,2,3,4,5]
let res = filter(arr,item=>{
return item>3
})
console.log(res)// [4,5]
8. map()
let arr = [
{
name:'手机',
pay: '2000'
},{
name:'电脑',
pay: '10020'
},{
name:'防晒',
pay: '100'
},{
name:'粉底液',
pay: '400'
},{
name:'护肤品',
pay: '1000'
},
]
// 为商品添加id
let res = arr.map((item,index)=>{
return{
...item,
id: index
}
})
9.reduce()
// reduce((pre,value,index,arr),initial)
// pre: 上一次返回的结果
// value: 值
// index:索引
// arr:数组
// initial:pre初始值;若没有初始值:第一次调用,pre的值是index=0的值,value是index=1;后面是pre=undefined。若有初始值pre=initial,value=arr[0]
// 使用场景 统计/加法/最大值/最小值
let arr = [
{
name:'手机',
pay: '2000'
},{
name:'电脑',
pay: '10020'
},{
name:'防晒',
pay: '100'
},{
name:'粉底液',
pay: '400'
},{
name:'护肤品',
pay: '1000'
},
]
//获取购物车超过10000的物品的数量
let res = arr.reduce((pre,value)=>{
return pre+=value>10000?1:0
},0)
//最后购买的东西一共多少钱
let res = arr.reduce((pre,value)=>{
return pre+=value
},0)
//购物车最贵/最便宜的东西
let res = arr.reduce((pre,value)=>{
return pre>value?pre:value
},[])
//购物车去重
let obj = {}
let res = arr.reduce((pre,value)=>{
if(obj[value.name]){
return pre
}else{
pre.push(value);
obj[value.name] = true;
return pre
}
},[])