JavaScript数组方法

85 阅读2分钟

数组方法整理

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
     }
     
 },[])