1 、解构
解构赋值是
ES6
中推出的一种高效、简洁的赋值方法
-
数组解构
let [,,third] = [1,2,3];
console.log(third); //3
let [first,...last] = [1,2,3];
console.log(last); //[2,3]
-
对象解构
// 对象的解构赋值
let {name,sex} = {"name":"huangsen","sex":"nan"};
console.log(name);
2、Rest + Spread
-
rest
function f(x, ...y) {
console.log(x * y.length);
}
f(3, "hello","222","111");
-
spread
function add(x,y,z) {
console.log(x+y+z);
}
add(...[1,2,3]);//6
3、Map + Set + WeakSet
Set
对象是一组不重复的值,重复的值将被忽略,值类型可以是原始类型和引用类型WeakSet
也是不重复的值的集合,但是只能用来存放对象。Set
的用法:set
数据类型的元素,必须是唯一的;添加重复的元素不会报错,只是不会生效;Map
结构提供了“值—值”的对应,是一种更完善的Hash
结构实现。如果你需要“键值对”的数据结构,Map比Object
更合适。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
-
Set
//有四个方法:
1. add(value):添加某个值,返回Set结构本身。
2. delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
3. has(value):返回一个布尔值,表示该值是否为Set的成员。
4. clear():清除所有成员,没有返回值
let s = new Set();
s.add("hello").add("goodbye").add("hello");
console.log(s.size);//2
console.log(s.has("hello")) //true
-
set遍历
let s = new Set([1,2,3,4,5,6]);
s.forEach((item)=>{
console.log(item)//1,2,3,4,5,6
});
-
Map
// map常用的属性值和方法
1. map.size 长度
2. set设置,get获取
3. delete() 删除; clear()清空
// Maps
let m = new Map();
m.set("hello", 42);
m.set(s, 34);
console.log(m.get(s)); //34
console.log(m.get("hello")) //42
map
的其他方法:http://www.cnblogs.com/dagaoxiaozheng/p/6605981.html
-
Weak Sets
var ws = new WeakSet();
ws.add({ data: 42 });
4、WeakSet 和 Set 的区别:
-
WeakSet
的成员只能是对象,而不能是其他类型的值 -
WeakSet
中的对象都是弱引用,即垃圾回收机制不考虑WeakSet
对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet
之中。这个特点意味着,无法引用WeakSet
的成员,因此WeakSet
是不可遍历的。 -
WeakSet
和set
支持的数据类型不一样; -
WeakSet
中的对象都是若引用;不会检测地址是否被垃圾回收掉; - 他的属性,没有
size
属性,没有clear
方法,不能遍历;
5、WeakMap的用法
-weakMap
和map
的区别:
- 前者接收的值只能是对象
- 他没有
set
属性,不能使用clear()
- 不能遍历; 跟
weakSet
和set
的区别一样;
6、Map的用法
-
map
的属性名可以是任意数据类型; -
map
增加值,用set
,获取值用get
7、WeakMap 和 WeakSet 被设计来完成与Map、Set几乎一样的行为,除了以下一些限制:
-
WeakMap
只支持new、has、get、set
和delete
。 -
WeakSet
只支持new、has、add
和delete
。 -
WeakSet
的值和WeakMap
的键必须是对象。 - 还要注意,这两种弱集合都不可迭代,除非专门查询或给出你感兴趣的键,否则不能获得一个弱集合中的项。
8、求两个集合的交集、并集、差集
let set1 = new Set([1, 2, 3, 4, 5, 6]);
let set2 = new Set([4, 5, 6, 7, 8, 9]);
-
并集
//并集
let union = new Set([...set1, ...set2]);
union.forEach((item)=>{
console.log(item);//1,2,3,4,5,6,7,8,9
});
-
交集
//交集
let intersect = new Set([...set1].filter(x => set2.has(x)));
intersect.forEach((item)=>{
console.log('交集:'+item);//4,5,6
});
-
差集(
一般地,记A,B是两个集合,则所有属于A且不属于B的元素构成的集合,叫做集合A减集合B(或集合A与集合B之差),类似地,对于集合A、B,我们把集合{x∣x∈A,且x∉B}叫做A与B的差集
)
//差集
let intersect1 = new Set([...set1].filter(x => !set2.has(x)));
intersect1.forEach((item)=>{
console.log('差集:'+item);//1,2,3
});
9、数组去重
-
Set + Array.from()
数组去重
let arr = [12,13,12,11,0];
let arr1 = Array.from(new Set(arr));
console.log(arr1);//输出:12,13,11,0
-
…[拓展运算符] +
Set
数组去重
let arr = [12,13,12,11,0];
let arr1 = [...new Set(arr)];
console.log(arr1);
网友评论