广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >JavaScript字典与集合应用实例分析
  • 484
分享到

JavaScript字典与集合应用实例分析

2024-04-02 19:04:59 484人浏览 八月长安
摘要

这篇文章主要介绍“javascript字典与集合应用实例分析”,在日常操作中,相信很多人在JavaScript字典与集合应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解

这篇文章主要介绍“javascript字典与集合应用实例分析”,在日常操作中,相信很多人在JavaScript字典与集合应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript字典与集合应用实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

JavaScript字典与集合应用实例分析

字典

什么是字典

说到字典,第一时间想到的应该就是新华字典,实际上,这跟编程中的字典类似,两者都有一个特点,就是一一对应(yi yi dui ying),或者说是映射

字典通常以**【键,值】** 对的形成存储,因为是以键值对的形式存储,更方便通过key来获取value

比如存储用户信息:

{
  'username': '一碗周',
  'age': 18
}

JavaScript中的字典

在JavaScript中,对象好像拥有字典的所有特点,但是在es6中新增Map,用来表示字典,这里的map不是翻译成地图,而是映射。

示例代码如下:

// 创建一个字典
const map = new Map()

// 往字典中存储信息
map.set('username', '一碗周')
map.set('age', 18)
console.log(map) // Map(2) { 'username' => '一碗周', 'age' => 18 }

字典的应用

在学习链表的时候我们做了一个算法题,是力扣中题号为20的一道题,它的题目:有效的括号,题目大意就是判断给定字符串中的括号是否匹配,匹配返回true,否则返回false

解题思路如下:

  • 判断字符串的长度是否为偶数,不为偶数直接返回false,因为括号都是成对出现的;

  • 新建一个栈;

  • 遍历字符串,遍历到每一项时如果时左括号,将其压入栈;如果是右括号,与栈顶对比,如果相匹配则出栈,不匹配则返回false

我们原来的解法:


var isValid = function(s) {
    if (s.length % 2 !== 0) return false
    const stack = []
    for(let i = 0; i<s.length; i++) {
        const c = s[i] // 记录当前项
        if (c === '(' || c === '[' || c==='{') {
            stack.push(c)
        } else {
            const t = stack[stack.length - 1] // 获取栈顶元素
            if (
                (t === '(' && c === ')') ||
                (t === '[' && c === ']') ||
                (t === '{' && c === '}') 
            ) {
                stack.pop()
            } else {
                return false
            }
        }
    }
    // 如果为0表示全部匹配,有剩余则表示不匹配
    return stack.length === 0
};

在上面的代码中,条件判断中的判断条件非常的长,这时我们就可以利用字典来优化这个写法,

实现代码如下:


var isValid = function(s) {
    // 1. 判断字符串的长度是否为偶数,不为偶数直接返回false,因为括号都是成对出现的;
    if (s.length % 2 !== 0) return false
    const stack = []
    const map = new Map() // 将所有括号的对应关系存储在字典中
    map.set('(', ')')
    map.set('[', ']')
    map.set('{', '}')
    for(let i = 0; i<s.length; i++) {
        const c = s[i] // 记录当前项
        // 判断是否存在 key 也就是左括号,如果存储,将左括号存储在栈中
        if (map.has(c)) {
            stack.push(c)
        } else {
            const t = stack[stack.length - 1] // 获取栈顶元素
            if (map.get(t) === c) { // 获取最后一个左括号,判断是否与右括号匹配
                stack.pop() // 出栈
            } else {
                return false
            }
        }
    }
    // 如果为0表示全部匹配,有剩余则表示不匹配
    return stack.length === 0
};

在这个代码中,我们优化了if语句中的判断条件。

集合

什么是集合

集合是由一组无序且不重复的元素构成。我们可以将集合看成一种特殊的数组,它的特殊之处就是无序且不重复,这也就意味着我们不能通过下标的方式进行访问,而且集合中不会出现重复的元素;

JS中的集合

在JavaScript中提供了集合这个数据结构,即SetMDN中的描述如下:

Set对象是值的集合,你可以按照插入的顺序迭代它的元素。Set中的元素只会出现一次,即Set中的元素是唯一的。

集合中的操作

在集合中主要有以下场景操作:

  • 添加元素到集合中;

  • 在集合中删除某元素;

  • 判断元素是否在集合中;

  • 清空集合;

  • 求交集、并集、差集;

除了最后一种Set对象就为我们提供了对应的方法,示例代码如下:

const arr = [1, 2, 3, 2, 3, 4, 5]
// 利用set实现去重
const set = new Set(arr) // [1, 2, 3, 4, 5]

// 往集合中添加元素
set.add(3) // [1, 2, 3, 4, 5] 添加失败,集合中不允许出现重复元素
set.add(6) // [1, 2, 3, 4, 5, 6]

// 判断元素是否在集合中
set.has(2) // true
set.has(7) // false

// 删除集合中的元素
set.delete(1) // [2, 3, 4, 5, 6]

// 清空集合
set.clear()

交集、并集、差集的封装

首先我们需要了解一下什么交集、并集、差集。

  • 并集:对于给定的两个集合,返回一个包含两个集合中所有元素的新集合

  • 交集:对于给定的两个集合,返回一个包含两个集合中共有元素的新集合

  • 差集:对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合

下面这个图更好的解释了什么是交集、并集、差集。

JavaScript字典与集合应用实例分析

封装代码如下:

// 求两个集合的并集
export function uNIOn(setA, setB) {
  let _union = new Set(setA)
  for (let elem of setB) {
    _union.add(elem) // 因为集合中不存在重复元素
  }
  return _union
}

// 求两个集合的交集
export function intersection(setA, setB) {
  let _intersection = new Set()
  for (let elem of setB) {
    if (setA.has(elem)) {
      _intersection.add(elem)
    }
  }
  return _intersection
}
// 求两个集合的差集
export function difference(setA, setB) {
  let _difference = new Set(setA)
  for (let elem of setB) {
    _difference.delete(elem)
  }
  return _difference
}

封装的这三个方法全部利用了集合不能重复的特性。

到此,关于“JavaScript字典与集合应用实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: JavaScript字典与集合应用实例分析

本文链接: https://www.lsjlt.com/news/98383.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript字典与集合应用实例分析
    这篇文章主要介绍“JavaScript字典与集合应用实例分析”,在日常操作中,相信很多人在JavaScript字典与集合应用实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • Python集合与字典数据类型实例分析
    这篇文章主要讲解了“Python集合与字典数据类型实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python集合与字典数据类型实例分析”吧!前言集合数据类型是没有顺序的简单对象的聚集...
    99+
    2023-06-29
  • JavaScript字典与集合怎么应用
    本篇内容主要讲解“JavaScript字典与集合怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript字典与集合怎么应用”吧!字典什么是字典说到字典,第一时间想到的应该就是新...
    99+
    2023-07-02
  • Python列表、字典、元组和集合实例分析
    这篇文章主要介绍了Python列表、字典、元组和集合实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python列表、字典、元组和集合实例分析文章都会有所收获,下面我们一起来看看吧。列表1.列表什么是列表...
    99+
    2023-06-30
  • Python字符串,列表,字典和集合实例处理分析
    今天小编给大家分享一下Python字符串,列表,字典和集合实例处理分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.如何...
    99+
    2023-07-02
  • JavaScript弱映射与弱集合实例分析
    这篇文章主要介绍“JavaScript弱映射与弱集合实例分析”,在日常操作中,相信很多人在JavaScript弱映射与弱集合实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解...
    99+
    2022-10-19
  • ES6中Set与WeakSet集合实例分析
    这篇文章主要讲解了“ES6中Set与WeakSet集合实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES6中Set与WeakSet集合实例分析”吧!Set是值永不重复的特殊集合每天都...
    99+
    2023-06-17
  • JavaScript字符串与数字实例分析
    本篇内容主要讲解“JavaScript字符串与数字实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript字符串与数字实例分析”吧! &nb...
    99+
    2022-10-19
  • Python字典的常用方法实例分析
    这篇文章主要讲解了“Python字典的常用方法实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python字典的常用方法实例分析”吧!字典添加与修改方法利用 [ ] 处理看到 [] 我...
    99+
    2023-06-29
  • Java Map集合使用实例分析
    这篇文章主要讲解了“Java Map集合使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java Map集合使用实例分析”吧!Map接口   ...
    99+
    2023-06-30
  • Java序列化与字典功能的序列化实例分析
    这篇文章主要介绍了Java序列化与字典功能的序列化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java序列化与字典功能的序列化实例分析文章都会有所收获,下面我们一起来看看吧。两种解决方案前端查询字典数...
    99+
    2023-07-02
  • JavaScript字母大小写与函数实例分析
    这篇文章主要介绍了JavaScript字母大小写与函数实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript字母大小写与函数实例分析文章都会有所收获,下面我...
    99+
    2022-10-19
  • SQL字符串的合并与拆分实例代码分析
    本篇内容主要讲解“SQL字符串的合并与拆分实例代码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL字符串的合并与拆分实例代码分析”吧!字符串的合并在Or...
    99+
    2022-10-19
  • JavaScript对象特性与实践应用的示例分析
    小编给大家分享一下JavaScript对象特性与实践应用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!JavaScript 的简单数据类型是数字、字符串、布尔值(true/fal...
    99+
    2022-10-19
  • javascript ES6中set集合、map集合使用方法详解与源码实例
    set与map理解 ES6中新增,set集合和map集合就是一种数据的存储结构(在ES6之前数据存储结构只有array,object),不同的场景使用不同的集合去存储数据 set集合...
    99+
    2022-12-10
    javascript ES6中set集合 map集合使用方法详解与源码实例 JS ES6中set集合使用方法 JS ES6中map集合使用方法
  • Go中的字符串应用实例分析
    这篇“Go中的字符串应用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go中的字符串应用实例分析”文章吧。字符串的本...
    99+
    2023-06-30
  • mysql累积聚合原理与用法实例分析
    本文实例讲述了mysql累积聚合原理与用法。分享给大家供大家参考,具体如下: 累积聚合为聚合从序列内第一个元素到当前元素的数据,如为每个员工返回每月开始到现在累积的订单数量和平均订单数量 行号问题有两个解决...
    99+
    2022-10-18
  • WebSocket与实时通信的应用案例分析
    随着互联网的发展和技术的进步,实时通信在各种应用中变得越来越重要。而传统的基于HTTP的请求-响应模式往往无法满足实时通信的需求,因此WebSocket作为一种新的协议应运而生。WebSocket协议基于TCP,允许在客户端和服务器之间建立...
    99+
    2023-10-21
    WebSocket:WebSocket是一种协议 支持实时通信。关键词:WebSocket
  • JavaScript引用赋值与传值赋值实例分析
    这篇文章主要介绍“JavaScript引用赋值与传值赋值实例分析”,在日常操作中,相信很多人在JavaScript引用赋值与传值赋值实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript引...
    99+
    2023-06-30
  • mysql数据库应用管理+乱码+字符集的示例分析
    这篇文章主要为大家展示了“mysql数据库应用管理+乱码+字符集的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql数据库应用管理+乱码+字符集的...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作