JavaScript Set与Map数据结构详细分析

目录
  • Set
    • 基本使用
    • 遍历操作
  • Map
    • 基本使用

Set

ES6提供了新的数据结构 Set(集合)。它类似于数组,但成员的值都是唯一的,集合实现了iterator接口,所以可以使用 [扩展运算符] 和 [for...of] 进行遍历。

基本使用

添加新的元素

Set函数可以接受一个数组(或者具有iterable接口的其他数据结构)作为参数,用来初始化。

<script>
    // 声明一个 set
    let s = new Set([1,2,2,3,4,4,5]) //Set方法会自动去重
    // 添加新的元素
    console.log(s.add(6));
</script>

删除元素

<script>
    // 声明一个 set
    let s = new Set([1,2,2,3,4,4,5]) //Set方法会自动去重
    // 删除元素
    s.delete(1)
    console.log(s);
</script>

数组去重

<script>
    let arr = [1,2,2,3,4,4,5,6]
    let result = [...new Set(arr)]
    console.log(result);// [1, 2, 3, 4, 5, 6]
</script>

检测

<script>
    // 声明一个 set
    let s = new Set([1,2,2,3,4,4,5]) //Set方法会自动去重
    // 检测
    console.log(s.has(2));//true
</script>

清空

<script>
    // 声明一个 set
    let s = new Set([1,2,2,3,4,4,5]) //Set方法会自动去重
    // 清空
    console.log(s.clear());//undefined
</script>

遍历

<script>
    // 声明一个 set
    let s = new Set([1,2,2,3,4,4,5]) //Set方法会自动去重
    // 遍历
    for(let v of s){
        console.log(v);//1,2,3,4,5
    }
</script>

交集

<script>
    let arr = [1,2,3,4,4,5,4,3,1,2,6]
    let arr2 = [3,4,5,1,4,7,8]
    // 先去重,避免重复数字比较降低效率
    let result = [...new Set(arr)].filter(item=>{
        // 对arr2进行去重
        let newarr2 = new Set(arr2)
        if(newarr2.has(item)){
            return true
        }else{
            return false
        }
    })
    // 简写形式
    // let result = [...new Set(arr)].filter(item=>new Set(arr2).has(item))
    console.log(result);//[1, 3, 4, 5]
</script>

并集

<script>
    let arr = [1,2,3,4,4,5,4,3,1,2,6]
    let arr2 = [3,4,5,1,4,7,8]
    let union = [...new Set([...arr,...arr2])]
    console.log(union);
</script>

差集

<script>
    let arr = [1,2,3,4,4,5,4,3,1,2,6]
    let arr2 = [3,4,5,1,4,7,8]
    // 差集是交集的逆运算,主体的不同决定结果的不同
    let diff = [...new Set(arr)].filter(item => !(new Set(arr2).has(item)))
    console.log(diff);//[2, 6]
</script>

遍历操作

Set数据结构提供了四种遍历方法,用于遍历成员。

keys()、values()

由于 Set 结构键名和键值是同一个值,所以 keys 方法和 values 方法的行为完全一致,都是返回键名/值 。

<script>
    let set = new Set(['red', 'green', 'blue',1]);
    for (var item of set.keys()) {
        console.log(item);
    }
    for (var item1 of set.values()) {
        console.log(item1);
    }
    console.log(item === item1);//true
</script>

entries()

entries方法返回的结果包括键名和键值,所以输出的数组,其键名和键值完全相等。

<script>
    let set = new Set(['red', 'green', 'blue',1]);
    for (var item of set.entries()) {
        console.log(item);
    }
</script>

forEach()

forEach()方法用于对每个成员执行某种操作,该方法参数就是一个处理函数,该函数的参数与数组的forEach一致。

<script>
    let set = new Set(['red', 'green', 'blue',1]);
    set.forEach((value,key)=>console.log(key +':'+value))
</script>

Map

ES6提供了 Map 数据结构,它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map也实现了 iterator 接口,所以可以使用 [扩展运算符] 和 [for...of] 进行遍历。

基本使用

添加元素

<script>
    // 声明 Map
    let m = new Map()
    // 添加元素
    m.set('world',4)
    m.set('hello',function(){
        console.log('abc');
    })
    let person = {
        name:'张三'
    }
    m.set(person,[5,6,7])
    console.log(m);
</script>

因为为Map添加了三次元素,所以Map的长度为3。

删除元素

<script>
    // 声明 Map
    let m = new Map()
    let person = function(){
        console.log('hello world');
    }
    m.set(person,'HELLO WPRLD')
    m.set('people',[1,2,3])
    console.log(m);//Map(2)
    // 删除元素
    m.delete('people')
    console.log(m);//Map(1)
</script>

获取元素

get方法获取key对应的键值,如果找不到key,返回undefned。

<script>
    // 声明 Map
    let m = new Map()
    // 获取元素
    let person = function(){
        console.log('hello world');
    }
    m.set(person,'HELLO WPRLD')
    console.log(m.get(person))//HELLO WPRLD
</script>

检测元素

has方法返回一个布尔值,用来检测某个值是否在当前 Map 对象中。

<script>
    // 声明 Map
    let m = new Map()
    m.set('a',1)
    m.set(2,'b')
    m.set('c',3)
    // 检测键名是否存在
    console.log(m.has(1));//false
    console.log(m.has(2));//true
</script>

清除元素

clear方法清除所有元素,没有返回值。

<script>
    // 声明 Map
    let m = new Map()
    m.set('a',1)
    m.set(2,'b')
    m.set('c',3)
    // 清除所有
    m.clear()
    console.log(m);//Map(0)
</script>

Map的遍历操作和上文的Set方法一致,这里不再讲解。

到此这篇关于JavaScript Set与Map数据结构详细分析的文章就介绍到这了,更多相关JS Set与Map内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript之Map和Set_动力节点Java学院整理

    JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对. 但是JavaScript的对象有个小问题,就是键必须是字符串.但实际上Number或者其他数据类型作为键也是非常合理的. 为了解决这个问题,最新的ES6规范引入了新的数据类型Map.要测试你的浏览器是否支持ES6规范,请执行以下代码,如果浏览器报ReferenceError错误,那么你需要换一个支持ES6的浏览器: 'use strict'; var m = new Map();

  • javascript ES6中set集合、map集合使用方法详解与源码实例

    set与map理解 ES6中新增,set集合和map集合就是一种数据的存储结构(在ES6之前数据存储结构只有array,object),不同的场景使用不同的集合去存储数据 set集合 Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用. set集合语法: //创建一个set集合,传参为一个可迭代的对象 const s1 = new Set(iterable); API 名称 类型 简介 Set.add() 原型方法 添加数据 Set.has() 原型方法 判断是否存在一个数据 S

  • 详谈js遍历集合(Array,Map,Set)

    Array可以使用下标,Map和Set不能使用下标,ES6引入了iterable类型,Array,Map,Set都属于iterable类型,它们可以使用for...of循环来遍历: var a = ['A', 'B', 'C']; var s = new Set(['A', 'B', 'C']); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); for (var x of a) { // 遍历Array alert(x); } for (var

  • js中Map和Set的用法及区别实例详解

    目录 首先了解一下 Map 再来了解一下 Set 总结Map和Set的区别 结语: 首先了解一下 Map Map 是一组键值对的结构,和 JSON 对象类似. (1) Map数据结构如下 这里我们可以看到的是Map的数据结构是一个键值对的结构 (2) key 不仅可以是字符串还可以是对象 var obj ={name:"小如",age:9} let map = new Map() map.set(obj,"111") 打印结果如下 (3) Map常用语法如下 //初

  • JavaScript Set与Map数据结构详细分析

    目录 Set 基本使用 遍历操作 Map 基本使用 Set ES6提供了新的数据结构 Set(集合).它类似于数组,但成员的值都是唯一的,集合实现了iterator接口,所以可以使用 [扩展运算符] 和 [for...of] 进行遍历. 基本使用 添加新的元素 Set函数可以接受一个数组(或者具有iterable接口的其他数据结构)作为参数,用来初始化. <script> // 声明一个 set let s = new Set([1,2,2,3,4,4,5]) //Set方法会自动去重 //

  • JavaScript中的Map数据结构详解

    目录 1. 什么是 Map 2. Map 构造函数 2.1) 数组 2.2) Set 2.3) Map 3. Map 的实例属性和方法 3.1) Map 的属性 size 3.2) Map 的方法 set get has delete clear forEach 4. Map的注意事项 5. Map的使用场景 总结 1. 什么是 Map Map 就是映射的意思,即从键到值的映射. Map 保存键值对,并且能够记住键的原始插入顺序. 那么它和 Object 有什么区别 ? 对象一般用字符串作键 c

  • Android Map数据结构全面总结分析

    目录 前言 Map ArrayMap TreeMap HashMap 总结 前言 上一篇讲了Collection.Queue和Deque.List或Set,没看的朋友可以去简单看看,这一篇主要讲和Map相关的数据结构. Map 上篇有介绍过,Map是另一种数据结构,它独立于Collection,它的是一个接口,它的抽象实现是AbstractMap,它内部是会通过Set来实现迭代器 Set<Map.Entry<K, V>> entrySet(); 是和Set有关联的,思想上主要以ke

  • 浅谈es6 javascript的map数据结构

    本文介绍了es6 javascript的map数据结构,分享给大家,具体如下: Map 结构的目的和基本用法 JavaScript 的对象( Object), 本质上是键值对的集合( Hash 结构), 但是传统上只能用字符串当作键. 这给它的使用带来了很大的限制. var data = {}; var element = document.getElementById('myDiv'); data[element] = 'metadata'; data['[object HTMLDivElem

  • Java数据结构超详细分析二叉搜索树

    目录 1.搜索树的概念 2.二叉搜索树的简单实现 2.1查找 2.2插入 2.3删除 2.4修改 3.二叉搜索树的性能 1.搜索树的概念 二叉搜索树是一种特殊的二叉树,又称二叉查找树,二叉排序树,它有几个特点: 如果左子树存在,则左子树每个结点的值均小于根结点的值. 如果右子树存在,则右子树每个结点的值均大于根结点的值. 中序遍历二叉搜索树,得到的序列是依次递增的. 二叉搜索树的左右子树均为二叉搜索树. 二叉搜索树的结点的值不能发生重复. 2.二叉搜索树的简单实现 我们来简单实现以下搜索树,就不

  • JavaScript详细分析数据类型和运算符

    目录 一.js中的数据类型 1.数值型 2.字符串型 3.逻辑(布尔)型 4.空(null)值 5.未定义(undefined) 6.复合数据类型Object 二.JavaScript中的运算符 1.算数运算符 2.赋值运算符 3.比较运算符 4.逻辑运算符 一.js中的数据类型 1.JS是弱类型的脚本语言,所有的变量对象的数据类型的声明都是var . 2.变量声明时没有确定具体的数据类型,在变量赋值时确定变量具体的数据类型. 五种基本的数据类型 1.数值型 number整数和浮点数统称为数值.

  • JavaScript Object.defineProperty与proxy代理模式的使用详细分析

    目录 1. Object.defineProperty 2. Object.defineProperties 3. proxy 代理模式 总结 1. Object.defineProperty const obj = {}; Object.defineProperty(obj,prop,descript); 参数 obj 要定义属性的对象 prop 要定义的属性 descript 属性描述符 返回值:被传递给函数的对象 descript接收一个对象作为配置: writable 属性是否可写 默认

  • JavaScript自动内存管理与垃圾回收策略详细分析讲解

    目录 自动内存管理 垃圾回收策略 标记清理策略 引用计数策略 内存管理技巧 解除引用 const和let变量声明 自动内存管理 JavaScript编程语言通过自动内存管理实现内存分配和闲置资源回收. 简单来讲就是:只要确定某个变量X不会再被使用了,就将变量X占用的内存进行释放.这种判断是周期性执行的,即:垃圾回收程序隔一定时间就会自动执行一次,以释放某些不必要的内存开支. JavaScript垃圾回收过程中的难点在于:如何正确判定一块内存是否还有用? 垃圾回收策略 在C/C++程序中,我们记忆

  • javascript中this的用法实践分析

    本文实例讲述了javascript中this的用法.分享给大家供大家参考,具体如下: 实践一:this在点击等事件中的指向 html结构: <button id='btn'>click me</button> javascript结构: var btn = document.getElementById('btn'); btn.onclick = function(event) { console.log(this.innerHTML); // click me // 还有另一种做

  • Java详细分析讲解HashMap

    目录 1.HashMap数据结构 2.HashMap特点 3.HashMap中put方法流程 java集合容器类分为Collection和Map两大类,Collection类的子接口有Set.List.Queue,Map类子接口有SortedMap.如ArrayList.HashMap的继承实现关系分别如下 1.HashMap数据结构 在jdk1.8中,底层数据结构是“数组+链表+红黑树”.HashMap其实底层实现还是数组,只是数组的每一项都是一条链,如下 当链表过长时,会严重影响HashMa

随机推荐