本篇文章给大家带来的内容是关于es6中Set和Map的对比介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

Set

1、add()方法和size属性{

let list = new Set();

// add()方法向Set数据添加元素

list.add(5);

list.add(7);

// size属性返回数据的长度

console.log(list.size); // 2

let arr = [1, 2, 3, 4, 5];

let set = new Set(arr);

console.log(set, set.size); // Set(5) {1, 2, 3, 4, 5} 5

}

2.Set的元素必须是唯一的{

let list = new Set();

list.add(1);

list.add(2);

list.add(1); // 重复元素不会添加进去

console.log(list); // Set(2) {1, 2}

// 数组去重

let arr = [1, 2, 3, 1, '2'];

let list2 = new Set(arr);

console.log(list2); // Set(4) {1, 2, 3, "2"}

}

3.has(),delete(),clear(){

let arr = ['add', 'delete', 'clear', 'has'];

let list = new Set(arr);

console.log(list.has('add')); // true

list.delete('add');

console.log(list); // Set(3) {"delete", "clear", "has"}

list.clear();

console.log(list); // Set(0) {}

}

4.Set的遍历{

let arr = ['add', 'delete', 'clear', 'has'];

let list = new Set(arr);

// Set结构的数据,key和value是同一个值

for (let value of list) {

console.log('value', value); // 'add' 'delete' 'clear' 'has'

}

for (let key of list.keys()) {

console.log('keys', key); // 'add' 'delete' 'clear' 'has'

}

for (let value of list.values()) {

console.log('values', value); // 'add' 'delete' 'clear' 'has'

}

for (let [key, value] of list.entries()) {

console.log('entries', key, value);

}

list.forEach(function (item) {

console.log(item); // 'add' 'delete' 'clear' 'has'

});

}

WeakSet

WeakSet和Set的不同点:WeakSet的元素只能是对象,不能是数值、字符串、布尔值...

WeakSet中的对象都是弱引用,垃圾回收机制不考虑WeakSet对该对象的引用。WeakSet里面的引用,都不计入垃圾回收机制,所以不会引发内存泄漏的问题。所以,WeakSet适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在WeakSet里面的引用就会自动消失。{

let weakList = new WeakSet();

let arg = {name: 'hhh'};

weakList.add(arg); // WeakSet的元素只能是对象

// weakList.add(2); // Uncaught TypeError: Invalid value used in weak set

console.log(weakList); // WeakSet {{name: 'hhh'}}

// 注意:WeakSet没有size属性,没有clear方法,不能遍历。其他的用法和Set相同

}

Map

1.set()方法和get()方法{

let map = new Map();

let arr = ['123'];

// Map的key可以是任意数据类型

map.set(arr, 456); // map.set(key, value),这里用数组作为key,添加一个值为456的元素

console.log(map.get(arr)); // 456

}

2.Map的另一种定义方式{

let map = new Map([['a', 123], ['b', 456]]); // 接收一个数组作为参数,数组的每一项为:[key,value]

console.log(map); // Map(2) {"a" => 123, "b" => 456}

console.log(map.size); // 2

console.log(map.has('b')); // true

map.delete('a');

console.log(map); // Map(1) {"b" => 456}

map.clear();

console.log(map); // Map(0) {}

}

WeakMap

WeakMap和Map的不同点:WeakMap的key只能是对象

WeakMap的键名所引用的对象都是弱引用,垃圾回收机制不考虑对此对象的引用。(注意,WeakMap弱引用的只是键名,而不是键值。键值依然是正常引用。)基本上,如果你要往对象上添加数据,又不想干扰垃圾回收机制,就可以使用WeakMap。{

let weakmap = new WeakMap();

let o = {};

weakmap.set(o, 123);

console.log(weakmap.get(o)); // 123

// 注意:WeakMap没有size属性,没有clear方法,不能遍历。类似于Set与WeakSet的区别

}

Set,Map和Array,Object的对比

Map与Array对比{

// 数据结构横向对比,增 查 改 删

let map = new Map();

let array = [];

// 增

map.set('t', 1);

array.push({'t': 1});

console.log(map, array); // {"t" => 1} [{'t': 1}]

// 查

let map_exist = map.has('t');

let array_exist = array.find(item => item.t);

console.log(map_exist, array_exist); // true {t: 1}

// 改

map.set('t', 2);

array.forEach(item => item.t ? item.t = 2 : '');

console.log(map, array); // {"t" => 2} [{'t': 2}]

// 删

map.delete('t');

let index = array.findIndex(item => item.t);

array.splice(index, 1);

console.log(map, array); // {} []

}

Set与Array对比{

let set = new Set();

let array = [];

let item = {'t': 1};

// 增

set.add(item);

array.push(item);

console.log(set, array); // {{'t': 1}} [{'t': 1}]

// 查

let set_exist = set.has(item);

let array_exist = array.find(item => item.t);

console.log(set_exist, array_exist); // true {t: 1}

// 改

set.forEach(item => item.t ? item.t = 2 : '');

array.forEach(item => item.t ? item.t = 2 : '');

console.log(set, array); // {{'t': 2}} [{'t': 2}]

// 删

set.forEach(item => item.t ? set.delete(item) : '');

let index = array.findIndex(item => item.t);

array.splice(index, 1);

console.log(set, array); // {} []

}

Map,Set与Object对比{

let item = {t: 1};

let map = new Map();

let set = new Set();

let obj = {};

// 增

map.set('t', 1);

set.add(item);

obj['t'] = 1;

console.log(obj, map, set); // {t: 1} Map(1) {"t" => 1} Set(1) {{t: 1}}

// 查

console.log(map.has('t'), set.has(item), 't' in obj); // true true true

// 改

map.set('t', 2);

item.t = 2;

obj['t'] = 2;

console.log(obj, map, set); // {t: 2} Map(1) {"t" => 2} Set(1) {{t: 2}}

// 删

map.delete('t');

set.delete(item);

delete obj['t'];

console.log(obj, map, set); // {} Map(0) {} Set(0) {}

}

建议:优先使用map,不使用array,特别是复杂的数据结构

考虑数据唯一性,使用set,放弃array和obj

php 数据类型 map,es6中Set和Map的对比介绍(附代码)相关推荐

  1. ES6中Reflect对象使用详解(附代码)

    目录 目录 Reflect的方法 Reflect.get(target, name, receiver) Reflect.set(target, name, value, receiver) Refl ...

  2. JPA中实现双向多对多的关联关系(附代码下载)

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  3. 微信小程序 过滤html,微信小程序中数据过滤的实现方法介绍(代码)

    本篇文章给大家带来的内容是关于微信小程序中数据过滤的实现方法介绍(代码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 因为微信小程序的wxml和js的内部实现机制是分开编译的.所 ...

  4. 遍历map java_Java中怎么遍历map中value值

    展开全部 遍历map中value大致有四种方法,具体每种方法的代码和解释如下:32313133353236313431303231363533e59b9ee7ad9431333365656630Map ...

  5. 独家 | 机器学习中的四种分类任务(附代码)

    作者:Jason Brownlee 翻译:陈丹 校对:杨毅远 全文约4400字,建议阅读18分钟 本文为大家介绍了机器学习中常见的四种分类任务.分别是二分类.多类别分类.多标签分类.不平衡分类,并提供 ...

  6. Winform中实现自定义水晶按钮控件(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个用户 ...

  7. Winform中实现右下角Popuo弹窗提醒效果(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个fo ...

  8. Winform中使用Timer实现滚动字幕效果(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个Fo ...

  9. Matlab中爱心的四种画法(附代码)

    什么Σ(っ°Д°;)っ?居然可以用matlab画出漂亮的爱心图案? 方法一~ % Method 1x = -1:1/400:1; % 给定一个x的范围,指定步长为1/400y1 = 0.6 * abs ...

最新文章

  1. 算法:恢复二叉搜索树
  2. EOS开发步骤(2) 钱包操作
  3. 数据结构实验之排序四:寻找大富翁
  4. Infer.NET——为热爱概率的人准备的库
  5. python 24点 tkinter_python_Tkinter使用过程中的一些小的总结
  6. 【学习 OpenCV】—— 色彩空间(RGB、HSV、rgb2hsv、rgb2gray 的实现)
  7. android9.0 uri,Android9.0源码学习 - Launcher Activity(一)
  8. 【渝粤教育】国家开放大学2018年秋季 1058t商法 参考试题
  9. 集成电路设计专业有计算机课程吗,集成电路属于什么专业大类 什么学科
  10. Git官网下载windows版本慢的问题
  11. 引入element组件插件
  12. php元换成万元,万元单位换算器(元换算成万元换算器)
  13. D3.js学习笔记七:多系列折线图与图例
  14. DELL EqualLogic PS存储硬盘故障数据恢复
  15. 淘宝Tmall,1688,拼多多API商品详情接口
  16. 计算机专业英语祈使句,英语祈使句有哪几种结构
  17. LVDS display 应用
  18. 2022年华中科技大学计算机考研复试分数线
  19. 有苦有乐的算法 --- 使用队列结构实现栈结构
  20. import java.awt.*这句话是什么含义

热门文章

  1. 固定定位(HTML、CSS)
  2. vue项目中使用sass的方法
  3. Open3d之网格变形
  4. mysql 键缓冲区_mysql:键缓存
  5. 海绵城市工程_打造透水“民心路”、共创海绵“生态城”|市政工程管理处持续推进城市道路“黑臭水体改造”工程...
  6. python如何使用函数_python中函数使用
  7. Object.preventExtensions()使用技巧
  8. 关于python中的round()和javascript中的round()的比较
  9. win7 64位系统配置服务器,Tomcat服务器win764位配置方法
  10. 二分法查找是基于有序_【二分查找】May1th “First Bad Version (Python3)”