doubleyong
管理员
管理员
  • 最后登录2026-05-10
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:6297回复:0

[js]ES6 Set 与 Map 数组结构

楼主#
更多 发布于:2018-08-27 16:13
Set
注:本身是一个构造函数,用来生成Set数据结构(类似数组,但并不是数组),成员的值都是唯
一的,不会重复。


const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
  console.log(i);
}
// 2 3 5 4

Set的方法:
1、操作方法:
add(val):添加,返回本身。
delete(val):删除,返回布尔
has(val):检查,返回布尔
 clear():清除成员,无返回
Array.from(Set):将Set转换为数组结构(用于数组去重)
[...set]:转换为数组结构

2、遍历操作
keys(): 返回键值
 values():返回键值
 entries():返回【键名,键值】
 fromEach():
let set = new Set(['red', 'green', 'blue']);
for (let x of set) {
  console.log(x);
}
// red
// green
// blue
set = new Set([1, 4, 9]);
set.forEach((value, key) => console.log(key + ' : ' + value))
// 1 : 1
// 4 : 4
// 9 : 9
利用Set实现并集,交集,差集

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

Map

const map = new Map([
  ['name', '张三'],
  ['title', 'Author']
]);
map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"
特殊地方
let map = new Map();
map.set(-0, 123);
map.get(+0) // 123
//
map.set(true, 1);
map.set('true', 2);
map.get(true) // 1
//
map.set(undefined, 3);
map.set(null, 4);
map.get(undefined) // 3
//
map.set(NaN, 123);
map.get(NaN) // 123
属性和操作方法:
 1、操作方法
 size:返回总成员数
 set(key, val):设置Map的键名和键值,已有则更新
 get(key):获取键名对应的键值,没有则返回undefined
 has(key):检查该键是否在成员中,返回布尔值
 delete(key):删除该键对应的成员,返回布尔值,删除失败返回
 false
 clear():删除所有成员。


2、遍历方法
 keys():
 values();
 entried():
 forEach();
map.forEach(function(value, key, map) {
  console.log("Key: %s, Value: %s", key, value);
});

数组的转换:
 键名转换:[...map.keys()]
 键值转换:[...map.values()]
 键名键值转换:[...entries()],[...map]


详细参考:http://es6.ruanyifeng.com/#docs/set-map
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号