ES6: Set数据结构

简介: ES6: Set数据结构

ES6 提供了新的数据结构 Set。

概念: Set类似于数组,但是成员的值都是唯一的,没有重复的值。


生成方式:

Set本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set();

Set函数可以接受一个数组作为参数,用来初始化。

const set = new Set([1, 2, 3, 4, 4]);


属性:

size(): 判断Set属性中元素个数

const s = new Set([1, 2, 2, 3])
console.log(s.size);

实例方法:


add(value):添加某个值,返回 Set 结构本身


delete(value):删除某个值,返回一个布尔值,表示删除是否成功


has(value):返回一个布尔值,表示该值是否为 Set 的成员


clear():清除所有成员,没有返回值

const s = new Set(); 
s.add(1).add(2).add(3); // 向 set 结构中添加值 
s.delete(2) // 删除 set 结构中的2值 
s.has(1) // 表示 set 结构中是否有1这个值 返回布尔值 
s.clear() // 清除 set 结构中的所有值

遍历


我们一般用for…of即可, 因为keys(), values()结果是一样的.


keys() 返回键名的遍历器, 这里的键名, 事实上就是键值

let s1 = new Set([1, 2, 2, 3, 4])
for(let i of s1.keys()) {
  console.log(i); // 1 2 3 4
}

values() 返回键值的遍历器

let s1 = new Set([1, 2, 2, 3, 4])
for(let i of s1.values()) {
  console.log(i); // 1 2 3 4
}

entries() 返回键值对的遍历器

let s1 = new Set([1, 2, 2, 3, 4])
for(let i of s1.entries()) {
  console.log(i); // 1 2 3 4
}
/*
  test.html:12 (2) [1, 1]
  test.html:12 (2) [2, 2]
  test.html:12 (2) [3, 3]
  test.html:12 (2) [4, 4]
*/

forEach() 用于对每个成员执行某种操作,没有返回值

s.forEach(value => console.log(value))

拓展方法:


1-将Set转化为数组

let s1 = new Set([1, 2, 2, 3, 4])
console.log(s1);
// 将Set转化为数组
console.log([...s1]);
console.log(Array.from(s1));

2-数组去重

let arr = [1, 2, 2, 2, 3, 4];
// Plan1:
let newArr1 = [...(new Set(arr))]
// Plan2:
let newArr2 = Array.from(new Set(arr));
console.log(newArr1); // [1, 2, 3, 4]
console.log(newArr2); // [1, 2, 3, 4]

面试题: 复杂数组的去重

let list = [1, 2, 2, "Nathan", "Nathan", [1, 2], [1, 2], {name: "Chen"}, {name: "Chen"}]
function check(arr) {
  let res = new Set()
  return arr.filter((item)=>{
    // 判断 has return false
    // 没有 return true
    let id = JSON.stringify(item)
    if(res.has(id)) {
      return false
    }else{
      res.add(id)
      return true
    }
  })
}
console.log(check(list));


参考: 013-ES6-Set数据结构_哔哩哔哩_bilibili


相关文章
|
20天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
23 3
|
12天前
|
存储 前端开发 索引
【Web 前端】ES6中,Set和Map的区别 ?
【5月更文挑战第1天】【Web 前端】ES6中,Set和Map的区别 ?
ES6之Set集合(通俗易懂,含实践)
ES6之Set集合(通俗易懂,含实践)
|
7月前
|
C++
【数据结构】红黑树封装map和set(上)
【数据结构】红黑树封装map和set(上)
|
4月前
|
存储 NoSQL 关系型数据库
Redis Set 用了 2 种数据结构来存储,到现在才知道
Redis Set 用了 2 种数据结构来存储,到现在才知道
42 0
|
4月前
|
存储 JavaScript
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
24 0
|
4月前
|
存储 前端开发 JavaScript
【面试题】ES6 如何将 Set 转化为数组
【面试题】ES6 如何将 Set 转化为数组
|
5月前
ES6学习(七)—Set 和 Map 数据结构
ES6学习(七)—Set 和 Map 数据结构
|
6月前
|
存储
ES6中Set集合
ES6中Set集合
46 0