Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
```javascript
let mySet = new Set();
```
## Set 的特性
- Set是唯一值的集合类似于数组,常用于数组出重
## Set 对象的几个常用方法和属性
> 1. `new Set() 创建新的Set对象。`
> 1. `add() 向 Set 添加新元素。`
> 1. `clear() 从 Set 中删除所有元素。`
>1. ` delete() 删除由其值指定的元素。`
>1. ` has() 如果值存在则返回 true。`
>1. ` forEach() 为每个元素调用回调。`
>1. ` keys() 返回 Set 对象中值的数组。`
>1. `size 返回元素个数。`
```javascript
let mySet = new Set();
mySet.add(1); // Set(1) {1}
mySet.add(5); // Set(2) {1, 5}
mySet.add(5); // Set(2) {1, 5} 这里体现了值的唯一性
mySet.add("some text");
// Set(3) {1, 5, "some text"} 这里体现了类型的多样性
var o = {a: 1, b: 2};
mySet.add(o);
mySet.add({a: 1, b: 2});
// Set(5) {1, 5, "some text", {…}, {…}}
// 这里体现了对象之间引用不同不恒等,即使值相同,Set 也能存储
```
## 类型转换
```javascript
// Array 转 Set
var mySet = new Set(["value1", "value2", "value3"]);
// 用...操作符,将 Set 转 Array
var myArray = [...mySet];
String
// String 转 Set
var mySet = new Set('hello'); // Set(4) {"h", "e", "l", "o"}
// 注:Set 中 toString 方法是不能将 Set 转换成 String
```
## 数组去重
```javascript
var mySet = new Set([1, 2, 3, 4, 4]);
[...mySet]; // [1, 2, 3, 4]
```
## 并集
```javascript
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4}
```
## 交集
`filter(function(item,index){}; 循环,(可以拿到下标)`
```javascript
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
//----------------------------
// ES5写法
var intersect = new Set([...a].filter(function(x){
return b.has(x);
); // {2, 3}
```
## 差集
```javascript
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1}
//----------------------------
// ES5写法
var intersect = new Set([...a].filter(function(x){
return !b.has(x);
); // {1}
```
## forEach 循环
```javascript
//Set 中用 forEach 获取不到下标,所以不用写index 这也是 forEach 和 for of 的区别
var a = new Set([11,22,33]);
a.forEach(function(item){
console.log(item);
}
//----------------------------
// ES6 箭头函数写法
a.forEach(item => console.log(item));
```
## Map 与 Set 的区别
1. set是以`[value, value]`的形式储存元素,而Map是以`[key, value]`的形式储存; set 没有`key`值。
2. Map可以通过`get`方法获取值,而set不能因为它只有值。
3. Set的值是唯一的可以做`数组去重`,Map由于没有格式限制,可以做`数据存储`。
es6 set
最新推荐文章于 2024-11-03 22:08:01 发布