博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es6
阅读量:4916 次
发布时间:2019-06-11

本文共 1841 字,大约阅读时间需要 6 分钟。

扩展运算符提供了复制数组的简便写法。

const a1 = [1, 2];// 写法一const a2 = [...a1];// 写法二const [...a2] = a1;

  

(2)合并数组

扩展运算符提供了数组合并的新写法。const arr1 = ['a', 'b'];const arr2 = ['c'];const arr3 = ['d', 'e'];// ES5 的合并数组arr1.concat(arr2, arr3);// [ 'a', 'b', 'c', 'd', 'e' ]// ES6 的合并数组[...arr1, ...arr2, ...arr3]// [ 'a', 'b', 'c', 'd', 'e' ]

  

const a1 = [{ foo: 1 }];const a2 = [{ bar: 2 }];const a3 = a1.concat(a2);const a4 = [...a1, ...a2];a3[0] === a1[0] // truea4[0] === a1[0] // true

  

上面代码中,a3a4是用两种不同方法合并而成的新数组,但是它们的成员都是对原数组成员的引用,这就是浅拷贝。如果修改了原数组的成员,会同步反映到新数组。

如果参数是一个真正的数组,Array.from会返回一个一模一样的新数组。

Array.from([1, 2, 3]) // [1, 2, 3]

值得提醒的是,扩展运算符(...)也可以将某些数据结构转为数组。

// arguments对象function foo() { const args = [...arguments]; }

基本用法

Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。const target = { a: 1 };const source1 = { b: 2 };const source2 = { c: 3 };Object.assign(target, source1, source2);target // {a:1, b:2, c:3}Object.assign方法的第一个参数是目标对象,后面的参数都是源对象。注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。const target = { a: 1, b: 1 };const source1 = { b: 2, c: 2 };const source2 = { c: 3 };Object.assign(target, source1, source2);target // {a:1, b:2, c:3}

  

扩展运算符可以用于合并两个对象。let ab = { ...a, ...b };// 等同于let ab = Object.assign({}, a, b);如果用户自定义的属性,放在扩展运算符后面,则扩展运算符内部的同名属性会被覆盖掉。let aWithOverrides = { ...a, x: 1, y: 2 };// 等同于let aWithOverrides = { ...a, ...{ x: 1, y: 2 } };// 等同于let x = 1, y = 2, aWithOverrides = { ...a, x, y };// 等同于let aWithOverrides = Object.assign({}, a, { x: 1, y: 2 });上面代码中,a对象的x属性和y属性,拷贝到新对象后会被覆盖掉。这用来修改现有对象部分的属性就很方便了。let newVersion = {  ...previousVersion,  name: 'New Name' // Override the name property};

  

// 去除数组的重复成员[...new Set(array)]

  

这就提供了去除数组重复成员的另一种方法。function dedupe(array) {  return Array.from(new Set(array));}dedupe([1, 1, 2, 3]) // [1, 2, 3]

  

 

转载于:https://www.cnblogs.com/guidan/p/9871711.html

你可能感兴趣的文章
[LeetCode 112 113] - 路径和I & II (Path Sum I & II)
查看>>
关于SpringCloud微服务架构概念的一点理解
查看>>
显示文件后缀
查看>>
Android 知识总汇
查看>>
字符转换
查看>>
codeforces水题100道 第十五题 Codeforces Round #262 (Div. 2) A. Vasya and Socks (brute force)
查看>>
PHP学习笔记 - 进阶篇(10)
查看>>
什么是测试策略?
查看>>
[深入React] 3.JSX的神秘面纱
查看>>
【codevs 2306】【bzoj 1877】[SDOI 2009]晨跑(费用流)
查看>>
第一次OO作业总结
查看>>
python 怎么画图
查看>>
EntityFramework Linq to Entities Left join and filter Include
查看>>
C#中的结构体与类的区别
查看>>
8th week blog 1
查看>>
BZOJ3991 [SDOI2015]寻宝游戏
查看>>
estt
查看>>
关于Java语言中那些修饰符
查看>>
LeetCode-380 Insert Delete GetRandom O(1)
查看>>
Flink – Trigger,Evictor
查看>>