1,强制要求参数
es6 有默认参数设置机制 ;允许在入参的括号里给参数赋予默认值 ;防止函数在调用时没有传参;
我们知道在js函数在入参的时候是入几个都可以的;
这就给了我们发挥的空间,我们来强制要求参数必须有 ,否则就报错;
const required = ()=>{ throw new Error("Missing parameter")}
const add=(a=required(),b=required())
=>a+b;
add(1,2);
add(1)
这样的话,如果少参数,那么控制台就会Uncaught Error: Missing parameter;达到强制输入参数的目的;
2,set 方法的妙用
(1)使用set来实现数组去重;
我们都知道set只存储唯一值;
所以 这样 const arr=[1,2,3,3];
const arr1 =Array.from(new Set(arr));
或者这样
const arr=[1,2,3,3];
const arr1 =[...new Set(arr)];
使用Array.from 或者 ...都可以实现Set 到 数组的转换;
(2) 基于 以上去重操作那么我们就可以实现一些东西了;
Array.from 或者 ...都已经 使得set变为数组了 ,那么就可以使用一些原生的api 例如 forEach,some ,every,filter,map,reduce
数组方法;
例如
const arr=[1,2,3,3,4,4,5,6];
const arr1 =[...new Set(arr)].filter((item,index)=>item>3);
3,解构赋值
3.1 对象解构
3.1.1删除对象上不需要的属性
例如:
const obj={name:"xiaoming",age:20,skill:["coding","cooking","learning"],field:["football","fun"]};
const {name,age,...otherAttrbute}=obj;
这样我们 就可以拿到除了name,age的其他的属性,变相的删除了这俩属性; 其他的属性放在otherAttrbute对象中;
以备后用;
3.1.2 合并对象;
利用...运算符来做结构;
例如:
const obj1={name:"xiaoming",age:20,address:"hangzhou"};
const obj2={name:"lily",age:18,address:"shanghai"};
const obj3={name:"lucy",age:18,address:"beijing"};
const newObj={...obj1,...obj2,...obj3}; //{name: "lucy", age: 18, address: "beijing"}
这样就实现了对象的结构合并,注意:相同Key名 后面的对象覆盖前面;
3.1.3 在函数的参数中解构 入参的对象;
例如 :
const xiaohong={
address:"hangzhou",
age:20,
someAttrbute:{
face:"guaziface",
leg:"biglongleg",
}
}
const getSomeAttrbute=({address,someAttrbute:{face},someAttrbute})=>{
console.log(address,face,someAttrbute)
}
getSomeAttrbute(xiaohong);
这样的话就可以直接拿到 该对象的某些个属性;
3.2 数组解构
3.2.1 数值交换
例如:
let a=1;
let b=2;
[b,a]=[a,b]
console.log(a);//2
console.log(b);//1
这样就实现了值的互换;
3.2.2 接收函数返回的多个结果;
async function getFullPost(){
return await Promise.all([
fetch("/post"),
fetch("/comments")
])
};
cosnt [post,comments]=getFullPost();
这样getFullPost()函数调用会得到一个数组 ,我们就可以通过解构赋值直接拿到每个返回结果的数据,方便处理;
4 关于reduce的一些妙用
首先声明 这是关于es5的方法 ,只是归并到这个文章了;
const arr=[1,2,3,4,5];
const result=arr.reduce((a,b)=>a+b);
console.log(result); //15
首先来说一下这个api的简单用法; 实现数组中的每一项相加 ,参数a是初始值, 或者计算结束后的返回值,b是当前元素; 这是简单用法 ,前方高能。
4.1.1 使用reduce同时实现map和filter
const nums=[10,20,30,40,50,60,70];
const result=nums.reduce((a,b)=>{
b=b*2;
if(b>50){
a.push(b);
}
return a
},[])
console.log(result);//[60, 80, 100, 120, 140]
这里后面是空数组是 可选参数 ,是指a的初始值;
这样一来实现了map方法,重新返回一个处理过的新的副本,
二来实现了filter方法实现了过滤;
这样就可以实现替代map和filter的结果;
4.1.2 统计数组中相同项的个数;
var cars=["BWM","BENZ","BENZ","TESLA","BWM","TOYOTA"];
var result=cars.reduce((a,b)=>{
a[b]=a[b]?++a[b]:1;
return a;
},{});
console.log(result);//{BWM: 2, BENZ: 2, TESLA: 1, TOYOTA: 1}
这样就得到了数组中每个元素的数量;