【2021-09-28】--------ES6学习(二)

 

1.迭代器

迭代器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)

Iterator 的作用有三个:一是为各种数据结构,提供一 个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。

Iterator 的遍历过程是这样的。

  1. 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。

  2. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

  3. 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

  4. 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

1.迭代器实现了Iterator接口,只要有实现了Iterator就可以使用for-of遍历

let arr=[1,2,3,4,5];
console.log(arr.keys());
console.log(arr.values());
console.log(arr.entries());
// keys values entries 当前变量是迭代器对象
// 迭代器对象实现了Iterator接口,只要实现了迭代接口就可以使用for-of 遍历
// let [a,b]=10; 报错10 is not iterable
let str='hello'; //实现了迭代器接口,可以遍历
// console.log(a,b);
for(let key of str){
    console.log(key)
}
// 以前遍历字符串
let [...a]=str;
console.log(a)
let result=str.split("")
console.log(result);
for(i=0;i<str.length;i++){
    console.log(str.charAt(i))
}
​
遍历迭代器对象

let keys=arr.keys()
for(let key of keys){
    console.log(key)
}
let values=arr.values();
for(let value of values){
    console.log(value,'--------')
}
let entries=arr.entries();
for(let entry of entries){
    console.log(entry)
}
while(!(result=keys.next()).done){
    console.log(result)
}
for-of实现原理就是调用迭代器的next()方法,第一次调用将指针指向数据结构的第一个成员,依次调用依次指向,直到没有成员可以指向,done为true
    迭代过程:创建一个指针对象,指向当前的数据结构起始位置;
            第一次调用指针对象的next方法,指向数据结构的第一个成员;
            第二次调用指针对象的next方法,指向数据结构的第二个成员;
            直到done为true,指向数据结构的结束位置;
let keys=arr.keys();
let values=arr.values();
let entries=arr.entries()
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(entries.next())
原生具备 Iterator 接口的数据结构如下:
    Array、Map、Set、String、TypedArray、arguments、NodeList 

2.Set

Set类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构展。Set 构造函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

Set API
var set=new Set()
//创建Set集合 成员是唯一的,key-value是一样的
//添加元素
set.add('hello');
set.add('world');
set.add('world');
console.log(set);
// 删除元素
set.delete('hello');
console.log(set);
// 遍历
let keys=set.keys()
let values=set.values()
let entries=set.entries();
console.log(keys,values,entries);
set.forEach((value)=>{
    console.log(value)
})
//判断有没有某个成员
set.has('hello');返回布尔值true或者false
//清空set
set.clear();
//返回set成员个数
set.size
------------------------------------------------
set应用 set构造函数可以接受数组或者其他可遍历的数据结构
let set=new Set([1,2,3,4,1,2,3,4]);
console.log(set);
//数组去重 
let arr=[1,2,3,5,3,2];
let result=new Set(arr);
console.log(result);
//将字符串转换为数组
let [...arr1]='hello';
//将set集合转换为数组
let [...arr2]=result;
console.log(arr2);
​
console.log([...new Set(arr)])

3.Map

Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

let obj={
    name:"zhangsan",
    age:12
}
//遍历键值对组成的数组
let arr=Object.entries(obj);
console.log(arr);
//将数组作为参数放到Map中华
let map=new Map(arr)
console.log(map);
​
// 添加元素
map.set('1','1');
console.log(map);
// 删除元素
map.delete('name');
console.log(map);
// 获取元素
console.log(map.get('age'));
// 遍历
let keys=map.keys()
let values=map.values()
let entries=map.entries();
console.log(keys,values,entries);
map.forEach((value,key)=>{
    console.log(value,key)
})
​
数组去重
1.for循环去重
var arr=[1,2,1,2,3,4,3];
let unique=(arr)=>{
    //数组的前一项
    for(let i=0;i<arr.length;i++){
        //数组的后一项
        for(let j=i+1;j<arr.length;j++){
            if(arr[i]===arr[j]){
                arr.splice(j,1);//移除重复元素
                j--;//修正下标
            }
        }
    }
}
unique(arr)
console.log(arr)
2.利用indexof去重
let arr=[1,2,1,2,3,4,3];
let unique = (arr) => {
    let res = [];
    for (let i = 0; i < arr.length; i++){
        if((res.indexOf(arr[i])) === -1 ){
            res.push(arr[i]);
        }
    }
    return res;
}
console.log(unique(arr));
3.利用includes去重
var arr=[1,2,3,2,1,3,4,'1','hello','1']
let unique=(arr)=>{
    let res=[]
    for(i=0;i<arr.length;i++){
        if(!res.includes(arr[i])){
            res.push(arr[i])
        }
    }
    return res
}
console.log(unique(arr))
4.利用filter去重
​
var arr=[1,2,3,'hello','1','hello',2,1];
let unique=(arr)=>{
    var res=arr.filter((item,index)=>{
        return arr.indexOf(item)===index
    })
    return res
}
console.log(unique(arr))
5.let arr1=[1,2,3,4,5,1,2,3]
var set=new Set(arr1);
console.log(set);
let [...a]=set;
console.log(a)

4.jquery封装的ajax

1.后台接口的请求方式get/post

2.后台接口的路径 url

3.请求的参数数据格式

4.请求头的设置

5.响应数据的获取

静态方法,需要$去调用
$.ajax({//配置对象})
设置全局变量 token认证
            $.ajaxSetup({
                headers:{
                    'Authorization':sessionStorage.getItem('token')
                }
            })
})配置全局变量
$.ajax({
    //请求的路径
    url:"47.93.206.13:7788",
    //请求的方式
    method:'get',
    //请求携带的数据
    data:{},
    请求头的设置
    headers:{
       'Content-Type':'application/json',
       'token','xxx'
    },
    //请求成功的回调函数
    success:function(res){
        //res就是后台响应的数据
    }
    //请求失败的回调函数
    error:function(err){
        //err就是后台响应的错误数据
    }
    
})
      $(function(){
          
           let obj={
               username:"admin2",
               password:123321
           }
           $('button').on('click',function(){
​
               $.ajax({
                    // 请求路径
                    url:"http://47.93.206.13:8888/user/login",
                    //请求方式
                    method:'post',
                    // 请求携带参数
                    data:JSON.stringify(obj),
                    // 请求头的设置
                    headers:{
                        'Content-Type':'application/json'
                    },
                    // 成功回调
                    success:function(res){
                        console.log(res);
                        sessionStorage.setItem('token',res.data.token);
                        $.ajaxSetup({
                            headers:{
                                'Authorization':sessionStorage.getItem('token')
                            }
                        })
                    },
                    error:function(err){
                        console.log(err)
                    }
               })
           })
        //    加载按钮
           $('#load').click(function(){
               $.ajax({
                   url:'http://47.93.206.13:8888/baseUser/cascadeRoleFindAll',
                   method:'get',
                   success:function(res){
                    console.log(res)
                   },
                   error:function(err){
                       console.log(err)
                   }
               })
           })
        
        })

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值