1.迭代器
迭代器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)
Iterator 的作用有三个:一是为各种数据结构,提供一 个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。
Iterator 的遍历过程是这样的。
创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
不断调用指针对象的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
遍历迭代器对象
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{ 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 { 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)
}
})
})
})