Set和Map数据结构。

11次阅读

共计 1662 个字符,预计需要花费 5 分钟才能阅读完成。

ES6 提供了新的数据结构 Set,它类似与数组,但是成员值都是唯一的,没有重复的值。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
}
上面代码通过 add() 方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。Set 函数可以接受一个数组作为参数,用来初始化。
// 例子 1
const set = new Set([1,2,3,4,4]);
[…set];//[1,2,3,4]
// 例子 2
const items = new Set([1,2,3,4,5,5,5,5]);
items.size//5
// 例子 3
const set = new Set(document.querySelectorAll(‘div’));
上面代码中,例一和例二都是 Set 函数接受数组作为参数,例三是接受类似数组的对象作为参数。上面代码也展示了一种去除数组重复成员的方法。
// 去除数组的重复成员
[…new Set(array)]
// 去除字符串里面的重复字符
[…new Set(‘ababbc’)].join(”);//’abc’
// 下面代码向 Set 实例添加了两个 NaN,但是只能加入一个。这表明在 Set 内部两个 NaN 是相等。
let set = new Set();
let a = NaN;
let b = NaN;
set.add(a);
set.add(b);
set // Set {NaN}
// 另外,两个对象总是不相等的。
let set = new Set();
set.add({});
set.size // 1
set.add({});
set.size // 2
Set 实例的属性和方法
Set 结构的实例有以下属性。
-Set.prototype.constructor: 构造函数,默认就是 set 函数。
-Set.prototype.size: 返回 Set 实例的成员总数。
Set 实例的方法分为两大类:操作方法和遍历方法。下面先介绍四个操作方法。
-add(value): 添加某个值,返回 Set 结构本身。
-delete(value): 删除某个值,返回一个布尔值,表示删除是否成功。
-has(value): 返回一个布尔值,表示该值是否为 Set 的成员。
-clear(); 清除所有成员,没有返回值。
下面这些属性和方法的示例如下:
s.add(1).add(2).add(2);
// 注意 2 被加入了两次
s.size//2
s.has(1)//true
s.has(2)//true
s.has(3)//false
s.delete(2);
s.has(2)//false
下面是一个对比,看看在判断是否包括一个键上面,Object 结构和 Set 结构的写法不同。
// 对象的写法
const properties ={
‘width’:1,
‘height’:1
};
if(properties[someName]){
//do something
}
//Set 的写法
const properties = new Set();
properties.add(‘width’);
properties.add(‘height’);
if(properties.has(someName)){
//do something
}
Array.from 方法可以将 Set 结构转为数组。
const items = new Set([1,2,3,4,5]);
const array = Array.from(items);
这就提供了去除数组重复成员的另一种方法。
function dedupe(array){
return Array.from(new Set(array));
};
dedupe([1,1,2,3])//[1,2,3]
遍历操作
Set 结构的实例有四个遍历方法,可以用于遍历成员。
-keys(): 返回键名的遍历器。
-values(): 返回键值的遍历器。
-entries(): 返回键值对的遍历器。
-forEach():使用回调函数遍历每个成员。

正文完
 0