10.1maps

ES6引入了两个非常受欢迎的数据结构:maps和sets。
Map对象它可以将键和值映射起来。

  1. const u1 = {
  2. name: 'Cynthia'
  3. };
  4. const u2 = {
  5. name: 'Cynthia'
  6. };
  7. const u3 = {
  8. name: 'Cynthia'
  9. };
  10. const u4 = {
  11. name: 'Cynthia'
  12. };
  13. //创建map
  14. const userRoles = new Map();
  15. userRoles.set(u1, 'User');
  16. userRoles.set(u2, 'User');
  17. userRoles.set(u3, 'Admin');
  18. //链式调用
  19. userRoles.set(u1, 'User')
  20. .set(u2, 'User')
  21. .set(u3, 'Admin');
  22. //map 取值
  23. let roleName = userRoles.get(u2);
  24. console.log(roleName);
  25. //has()方法来查看map中是否包含给定的key。
  26. userRoles.has(u1);//true
  27. //如果调用的key在map中不存在,就会返回一个undefined。
  28. userRoles.get(u4);//undefined
  29. //如果key已经在map中了,那么调用set()后key对应的value就会被替换:
  30. userRoles.set(u1,'Admin');
  31. userRoles.get(u1);
  32. //size属性返回map中的元素个数
  33. let size = userRoles.size
  34. console.log(size);
  35. // 使用keys() 方法可以拿到map中所有的键
  36. // 使用values ()可以拿到所有的值,
  37. // 使用entries ()则可以以数组的方式获取键值对,
  38. for(let u of userRoles.keys()){
  39. console.log(u.name);
  40. }
  41. for(let f of userRoles.values()){
  42. console.log(r);
  43. }
  44. for(let [u,r] of userRoles){
  45. console.log('${u.name}:${r}');
  46. }
  47. //使用delete()方法可以删除map中的一个条目
  48. userRoles.delete(u2);
  49. console.log(userRoles.size);
  50. //如果想删除map中的所有条目,可以调用clear()方法
  51. userRoles.clear();
  52. console.log(userRoles.size);

10.2 Weak maps

WeakMap 跟Map在本质上是相同的,除了以下几点
1.key必须是对象。
2.WeakMap中的key可以被垃圾回收。
3.WeakMap不能迭代或者清空。

  1. const SecretHolder = (function() {
  2. const secrets = new WeakMap();
  3. return class {
  4. setSecret(secret) {
  5. secrets.set(this, secret);
  6. }
  7. getSecret() {
  8. return secrets.get(this);
  9. }
  10. }
  11. })();
  12. const a = new SecretHolder();
  13. const b = new SecretHolder();
  14. a.setSecret('secret A');
  15. b.setSecret('secret B');
  16. console.log(a.getSecret());
  17. console.log(b.getSecret());

10.3 sets

set是一个不允许重复数据的集合。

  1. //创建一个Set实例
  2. const roles = new Set();
  3. roles.add("User");
  4. //add 添加元素
  5. roles.add("Admin");
  6. //size 集合大小
  7. console.log(roles.size);
  8. //删除元素
  9. roles.delete("admin");
  10. console.log(roles.size);
  11. console.log(roles.delete("admin"));

10.4 Weak sets

  1. const naughty = new WeakSet();
  2. const children = [{
  3. name: "Suzy"
  4. }, {
  5. name: "Derek"
  6. }];
  7. naughty.add(children[1]);
  8. for (let child of children) {
  9. if (naughty.has(child)) {
  10. console.log(`Coal for ${child.name}!`);
  11. } else {
  12. console.log(`Presents for ${child.name}!`);
  13. }
  14. }