es6使用整理

本文中所有实例都是摘自微信公众号大佬们的文章

…剩余操作符

基础用法1:展开

  const list = [2,3,4]
  const expandList = [1,...list,5]
  console.log(expandList)  //打印得到[1,2,3,4,5]

基础用法2:收集

  function foo1(a,b,...c){
    console.log(a,b,c);
  }
  foo1(1,2,3,4,5)  //打印得到1,2,[3,4,5]

基础用法3:将类数组转为数组
此处用Set为例,字符串、Map都可执行此操作,可自行体验

let list = [1,2,3,4,1,2,3]
  console.log([...new Set(list)]);  //打印[1,2,3,4]et为例,***字符串、Map都可执行此操作,可自行体验***

let list = [1,2,3,4,1,2,3]
  console.log([...new Set(list)]);  //打印[1,2,3,4]

基础用法3:合并数组或对象
以此可知,对象和数组的深拷贝也可用剩余操作符操作

//对象
const obj1 = {a:1,b:2}
const obj2 = {c:3,d:4}
const mergeObj = {...obj1,...obj2}    //{a:1,b:2,c:3,d:4}
//数组
const list1 = [1,2]
const list2 = [3,4]
const mergeList = [...list1,...list2]    // [1,2,3,4]

------------------------------------------------------------------------------------------------------------------------------------
进阶用法1:数组或对象的深拷贝
虽然上面写了,这里再啰嗦一下

//对象
const obj = {a:1,b:2}
const copyObj = {...obj1}
obj .a = 3
console.log(copyObj)     // 打印{a:1,b:2}

//数组
const list = [1,2]
const copyList = [...list1,...list2]
list[0]+=100
console.log(copyList )     // 打印[1,2]

进阶用法2:添加默认属性(important)
有时候从我们会遇到这样的情况,一个对象,大部分属性是相似的,只有小部分是不不同的,这时候我们就可以设置一个基础对象,具备基础属性,其他的对象可以通过扩展这个对象来得到。

 const obj = {
    name: 'Squirtle',
    type: 'Water',
    id:666
  }
  // 通过剩余操作符,可以获取对象中被解构对象取剩余的属性
  const {name,...rest} = obj
  console.log(name); //打印Squirtle
  console.log(rest); //打印{type: "Water", id: 666}
// 如果有批量数据处理,这样也很方便
const objList = [
  {
    name: 'Charmander',
    type: 'Fire'
  },
  { name: 'Squirtle', type: 'Water', abilities: ['Torrent', 'Rain Dish'] },
  {
    name: 'Bulbasur',
    type: 'Plant'
  }
];

function setNewObj(obj){
  const{abilities = [],...rest} = obj
  return {...rest,abilities}
}
const newObj = objList.map(item=>setNewObj(item))
//打印[ { name: 'Charmander', type: 'Fire', abilities: [] },   { name: 'Squirtle', type: 'Water', abilities: [ 'Torrent', 'Rain Dish' ] }, { name: 'Bulbasur', type: 'Plant', abilities: [] } ]
console.log(newObj); 

es6属性增强

属性交换在排序中很好用,之前在排序的时候,值的交换都是

let	a = 1
let	b = 2
let	tmp

tmp = b
b = a
a = tmp	

若是利用属性增强。则可以这样写,一行搞定,写的时候注意要在最后加上分号,不然会编译错误

[a,b] = [b,a];

reduce高阶用法

这个api基本上没看过都不会用得很熟练,但是微信公众号上面的《25个你不得不知道的数组reduce高级用法》之后,发现这个api是个精简代码的利器
相关概念
1、reduce的精华所在是将累计器逐个作用于数组成员上,「把上一次输出的值作为下一次输入的值」
2、reduce()函数相关概念
(1)定义:对数组中的每个元素执行一个自定义的累计器,将其结果汇总为单个返回值
(2)形式:array.reduce((t, v, i, a) => {}, initValue);如果没有传initValue,则第一项是initValue(arr[0])
(3)参数:「callback」:回调函数(必选) ;「initValue」:初始值(可选)
(4)回调函数的参数
「total」(t):累计器完成计算的返回值(必选)
「value」(v):当前元素(必选)
「index」(i):当前元素的索引(可选)
「array」(a):当前元素所属的数组对象(可选)
(5)过程
以t作为累计结果的初始值,不设置t则以数组第一个元素为初始值
开始遍历,使用累计器处理v,将v的映射结果累计到t上,结束此次循环,返回t
进入下一次循环,重复上述操作,直至数组最后一个元素
结束遍历,返回最终的t

用例(25个只选择了几个作为示例)

用法1:累加累乘
最基础的

function add(...vals){
    return vals.reduce((t,v)=>t+v,0)
}
function multiplication(...vals){
    return vals.reduce((t,v)=>t*v,1)
}
console.log('add',add(1,2,3)) //add 6
console.log('multiplication',multiplication(1,2,3))  //multiplication 6

用法2:数组去重
大厂面试中有让数组去重但是不给用Set的题,这个也算是一个解决方案

function uniqArr(arr){
    return arr.reduce((t,v)=>(!t.includes(v)&&t.push(v),t),[])
}
var uniqFuncArr = [1,4,1,4,1,2]
console.log('数组去重',uniqArr(uniqFuncArr))   //数组去重 [1, 4, 2]

用法3:数组成员个数统计

function arrCount(arr){
    return arr.reduce((t,v)=>(t[v]?t[v]++:t[v]=1,t),{})
}
const countArr = [1,2,5,1,3,5,2]
console.log('数组成员个数统计',arrCount(countArr))  //数组成员个数统计 {1: 2, 2: 2, 3: 1, 5: 2}

用法4:数组成员位置记录
刷力扣的时候排序会发现会需要找到指定元素在数组中所有索引,但是使用现成的api都很麻烦

function arrPosition(arr,key){
    return arr.reduce((t,v,i)=>(v==key&&t.push(i),t),[])
}
const positionArr = [2,5,5,1,2,6,3]
console.log('数组成员位置记录',arrPosition(positionArr,2))   //数组成员位置记录  [0, 4]

用法5:力扣第120题 (三角形最小路径和)

var minimumTotal = function(triangle) {
    return triangle.reduceRight((curr,arr)=>{   //从三角形最下面开始寻找路径
        return arr.map((item,index)=>{
            return item+=Math.min(curr[index],curr[index+1])
        })
    })
};

至于filter()、map()等其他api,都比较简单,自己去查下用法就行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ES6引入了class关键字,使得JavaScript可以更方便地使用面向对象编程。下面是ES6 class类的使用介绍: 1. 定义类: 使用class关键字定义一个类,类名通常首字母大写。类可以包含构造函数、方法和属性。 ```javascript class MyClass { constructor() { // 构造函数 } method() { // 方法 } property = value; // 属性 } ``` 2. 创建对象: 使用`new`关键字创建类的实例对象。 ```javascript const myObject = new MyClass(); ``` 3. 构造函数: 构造函数是一个特殊的方法,用于初始化对象的属性。在创建对象时自动调用。 ```javascript class MyClass { constructor(name) { this.name = name; } } const myObject = new MyClass("Alice"); console.log(myObject.name); // 输出 "Alice" ``` 4. 方法: 类中的方法定义在类的原型上,可以通过实例对象调用。 ```javascript class MyClass { method() { console.log("Hello"); } } const myObject = new MyClass(); myObject.method(); // 输出 "Hello" ``` 5. 继承: 使用`extends`关键字实现类的继承。子类可以继承父类的属性和方法,并可以添加自己的属性和方法。 ```javascript class ChildClass extends ParentClass { constructor() { super(); // 调用父类的构造函数 } childMethod() { // 子类的方法 } } ``` 6. 静态方法: 使用`static`关键字定义静态方法,静态方法属于类本身而不是实例对象。 ```javascript class MyClass { static staticMethod() { console.log("Static method"); } } MyClass.staticMethod(); // 输出 "Static method" ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值