ES6拓展运算及解构的多种用法

本文介绍javascript解构及三点运算符的多种用法,二者结合使用,让代码更简洁

解构:从对象中提取某个值,并且赋值

三点运算符:可以实现数组的拷贝等

1、三点运算符拷贝

1.1 简单拷贝

三点运算符最简单的用途就是实现对象和数组的拷贝

let arr = [1, 2, 3]
let res = [...arr]//[1,2,3]
//let res = [arr], 结果是[[1,2,3]]

//拷贝对象
let obj = { name: '张三', age: 18 }
let obj2 = { ...obj }//{ name: '张三', age: 18 }

数组和对象都是引用的,如果数组的元素是基本数据类型,深拷贝

当数组中存放复杂数组类型,浅拷贝

对象数组在工作中很常用,用三点运算符拷贝arr,得到arr2。改变arr,arr2也同样改变

//浅拷贝
let arr = [
  { name: '张三', age: 18 },
  {name: '李四', age: 20}
]

let arr2 = [...arr]
console.log(arr2) //[ { name: '张三', age: 18 }, { name: '李四', age: 20 } ]
arr[0].name = '王五'
console.log(arr2) //[ { name: '王五', age: 18 }, { name: '李四', age: 20 } ]

1.2 拷贝特定元素

拷贝除某个键值对以外的其他元素

const obj = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
}
let { a, ...other } = obj
console.log(a) //1
console.log(other) //{  b: 2, c: 3, d: 4}

1.3 连接数组

let arr3 = [...arr1,...arr2]
console.log(arr3);

1.4 用于传参

function sum(...numbers){
    console.log(numbers);//numbers是一个数组的形式
}
sum(1,2,3)

1.5 构造字面量对象

let person = {name: "tom", age: 18}
let person2 = {...person}
//复制的同时修改属性
//默认进行合并
let person3 = {...person, name: "jack",address: "地球"}

2、解构的基础用法

2.1 直接解构

数组及对象都可以解构

对象是key: value的形式,指定key,就能拿到指定的value

let obj = { name: '张三', age: 18, sex: '男' }
//声名变量age和name
const { name, age } = obj
console.log(age)//18

//一个对象解构并且重新命名
//从obj里面解构出name,然后重命名为newName
const {name: newName} = obj
console.log(newName)//张三

数组元素可根据位置解构出特定的某一项

//数组解构
const arr = [100, 200, 300]
let [c, d] = arr//100, 200
let [a, , b] = arr;//100, 300
console.log(a, b);

2.2 多层解构

连续解构,用于对象嵌套的情况

let obj = {
  name: '张三',
  age: 18,
  sex: '男',
  grades:
  {
    first: 90,
    second: 60,
    third: 60
  }
}

//嵌套解构
//注意:只对first进行了声名赋值,grades为undefined
const { grades: { first } } = obj
console.log(first)//90

//嵌套解构并且重命名
//注意:只对newValue进行了声名赋值,grades以及first都为undefined
const { grades: { first: newValue } } = obj
console.log(newValue)//90

3、结合ES6方法使用

解构及三点运算符,结果ES6的map,reduce, filter,可以大幅度简化代码

3.1 筛选出数组中某个值

筛选对象数组某个属性,对象数组,筛选出某一项,筛选出值,这些值构成一个数组

3.2 结合filter,筛选出数组某一项

筛选对象数组含有某属性的元素,得到元素,元素构成数组

let classMsg = [
    {
        grade: 1,
        name: "jack"
    },
    {
        grade: 3,
        name: "lucy"
    },
    {
        name: "lucy"
    },
]

const res = classMsg.map(({ grade }) => { return grade })//[1,3,undefined]
const res2 = classMsg.filter(({ grade }) => { return grade })
//[ { grade: 1, name: 'jack' }, { grade: 3, name: 'lucy' } ]

3.3 结合reduce,数组增加删除

项目里一个常见的需求,如果怎样,就把该元素添加进数组,否则,什么都不做

let person = {name: "tom", age: 18}
let person2 = {...person}
//复制的同时修改属性
//默认进行合并
let person3 = {...person, name: "jack",address: "地球"}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值