jses6常⽤⽅法
Object.freeze
冻结⼀个对象。再也不能被修改;不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外该对象的原型也不能被修改。
var obj ={ str:'123'};
Object.freeze(obj );
obj .str='456';
console.log(obj);// obj = { str: '123' };
函数的默认参数
/*
increment ⽅法中 value 参数默认值 1
*/
const increment=(number, value =1)=> number + value;
increment(5,5);// 10
increment(5);// 6
reduce
reduce: 对于空数组是不会执⾏回调函数;
reduce 为数组中的每⼀个元素依次执⾏回调函数,不包括数组中被删除或从未被赋值的元素;
// 语法
接受四个参数:初始值(或者上⼀次回调函数的返回值)当前元素值,当前索引,调⽤ reduce 的数组。
callback (执⾏数组中每个值的函数,包含四个参数)
1、previousValue (上⼀次调⽤回调返回的值,或者是提供的初始值(initialValue))
2、currentValue (数组中当前被处理的元素)
3、index (当前元素在数组中的索引)
4、array (调⽤ reduce 的数组)
initialValue (作为第⼀次调⽤ callback 的第⼀个参数。)
// 未设置初始值
var arr =[1,2,3,4];
var sum = duce((prev, cur, index, arr)=>{
console.log(prev, cur, index);
return prev + cur;
})
console.log('结果: ', arr, sum);
// 1 2 1
// 3 3 2
// 6 4 3
// 结果: [1, 2, 3, 4] 10
// 循环了三次, 索引从 1 开始循环
// 已设初始值
var arr =[1,2,3,4];
var sum = duce((prev, cur, index, arr)=>{
console.log(prev, cur, index);
return prev + cur;
},0)
console.log('结果: ', arr, sum);
// 0 1 0
// 1 2 1
// 3 3 2
// 6 4 3
// 结果: [1, 2, 3, 4] 10
// 第⼀次的prev的值是设置的初始值0,index是从0开始的, 数组长度是4,reduce函数循环4次。
结论:如果没有提供initialValue,reduce 会从索引1的地⽅开始执⾏ callback ⽅法,跳过第⼀个索引。如果提供initialValue,从索引0开始。
// 数组为空, 且未设置初始值会报错
var arr =[];
var sum = duce(function(prev, cur, index, arr){
console.log(prev, cur, index);
return prev + cur;
})// 报错,"TypeError: Reduce of empty array with no initial value"
// 数组为空, 设置初始值
var arr =[];
var sum = duce(function(prev, cur, index, arr){
console.log(prev, cur, index);
return prev + cur;
},0)// 0
reduce的简单⽤法
var arr =[1,2,3,4];
var sum = duce((x,y)=>x+y)
var mul = duce((x,y)=>x*y)
console.log( sum );//求和,10
console.log( mul );//求乘积,24
reduce的复杂⽤法js 二维数组
计算数组中每个元素出现次数
let names =['Alice','Bob','Tiff','Bruce','Alice'];
let nameNum = duce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur]=1
}
return pre
},{})
console.log(nameNum);// { Alice: 2, Bob: 1, Tiff: 1, Bruce: 1 }
数组去重
let arr =[1,2,3,4,4,1]
let newArr = duce((pre,cur)=>{
if(!pre.includes(cur)){
at(cur)
}else{
return pre
}
},[])
console.log(newArr);// [ 1, 2, 3, 4 ]
⼆维数组转⼀维
let arr =[[0,1],[2,3],[4,5]]
let newArr = duce((pre,cur)=>{
at(cur)
},[])
console.log(newArr);// [0, 1, 2, 3, 4, 5]
将多维数组转化为⼀维
let arr =[[0,1],[2,3],[4,[5,6,7]]]
const newArr=function(arr){
duce((pre,cur)=&at(Array.isArray(cur)?newArr(cur):cur),[]) }
console.log(newArr(arr));//[0, 1, 2, 3, 4, 5, 6, 7]
对象⾥的属性求和
var result =[
{
subject:'math',
score:10
},
{
subject:'chinese',
score:20
},
{
subject:'english',
score:30
}
];
var sum = duce(function(prev, cur){
return cur.score + prev;
},0);
console.log(sum)//60
解构
// es5 语法赋值
const user ={ name:'John Doe', age:34};
const name = user.name;
const age = user.age;
// es6 语法赋值
const{ name, age }= user;
解构赋值从对象中分配变量
const user ={ name:'John Doe', age:34};
const{ name: userName, age: userAge }= user; console.log(userName, userAge);// 'John Doe' 34
使⽤解构赋值从嵌套对象中分配变量
const user ={
johnDoe:{
age:34,
email:'johnDoe@freeCodeCamp'
}
};
// 对象的属性值赋值给具有相同名字的变量
const{ johnDoe:{ age, email }}= user;
// 对象的属性值赋值给具有不同名字的变量
const{ johnDoe:{ age: userAge, email: userEmail }}= user;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论