iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >JavaScript数据结构之字典方法怎么用
  • 944
分享到

JavaScript数据结构之字典方法怎么用

2023-06-30 08:06:56 944人浏览 安东尼
摘要

今天小编给大家分享一下javascript数据结构之字典方法怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、什么是字

今天小编给大家分享一下javascript数据结构之字典方法怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    一、什么是字典

    上面说了,集合中是通过元素的值来决定元素的唯一性。然而在字典中,存储的方式是键值对,也就是 key->value 的形式,字典只要求 key 必须唯一,value 则没有限制。

    这里 key 的作用是唯一标识,用来查询对应的 value 值。也就是说可以通过唯一的 key 映射到对应的 value。所以字典也称作映射符号表关联数组

    在计算机世界中,字典经常用来标识对象的引用地址。比如在 JavaScript 当中的引用类型数据,变量名会指向数据的引用,这是一对映射关系。变量名不能重复,但是不同的变量名可以指向同一块引用。

    与 Set 类似,JavaScript es6 中同样包含了一个 Map 类,既我们所说的字典。

    二、创建字典类

    下面我们参照 ES6 Map 类的实现,自己动手实现一个 Dictionary 类。

    class Dictionary {  constructor() {    this.table = {}  }}

    与前面的其他数据结构实现类似,我们在一个对象 table 中存储所有字典的元素。我们的保存形式为:table[key] = {key, value}

    在字典中,通常是用字符串作为键名(key),数据值可以是任意类型。但是 JavaScript 并不是强类型的语言,无法保证传入的键名一定是字符串。所以我们需要将键名做一次字符串的转化。

    写一个默认的转换字符串函数:

    function keyToString(item) {  if(typeof item === null) {    return 'NULL'  }  if(typeof item === undefined) {    return 'UNDEFINED'  }  if(item instanceof String) {    return `${item}`  }  return item.toString()}

    除此之外,我们还有必要将键值对的数据格式封装成一个单独的类。因为我们的 key 是不固定的,然而在后面的方法中要频繁使用 key,此时你不知道键名具体是什么。所以要封装一个 ValuePair 类,定义如下:

    class ValuePair {  constructor(key, value) {    this.key = key;    this.value = value;  }}

    接下来在类中声明一些必要的方法如下:

    • set:向字典中添加新元素

    • remove:以键名为参数,移除字典中对应的键值

    • hasKey:检测某个键名是否存在于字典中,存在则返回 true

    • get:用键名查找对应的键值并返回

    • clear:清空字典

    • size:返回字典所包含键的数量

    • isEmpty:在 size 等于零时返回 true

    • keys:返回字典中所有键名组成的数组

    • values:返回字典中所有键值组成的数组

    • keyValues:返回所有键值对

    • forEach:迭代所有的键值对

    1.hasKey 方法

    该方法的作用是检测一个键是否在字典中。因为这个方法会在添加和删除元素时使用,所以先实现:

    hasKey(key) {  return this.table[keyToString(key)] != null}

    首先对传入的键进行字符串转换,然后判断键值是不是 null 或者 undefined

    2.set 方法

    set 方法用来在字典中添加键值对:

    set(key, value) {  if(key != null && value != null) {    let table_key = keyToString(key)    this.table[table_key] = new ValuePair(key, value)    return true  }  return false}

    3.remove 方法

    remove 方法用来在字典中删除一个键值对:

    remove(key) {  if(this.hasKey(key)) {    delete this.table[keyToString(key)]    return true  }  return false}

    4.get 方法

    get 方法用来获取键名对应的键值:

    get(key) {  if(this.hasKey(key)) {    let table_key = keyToString(key)    return this.table[table_key].value  }  return undefined}

    5.keys, values, keyValues 方法

    这三个是比较简单的辅助函数,一起介绍:

    keyValues() {  return Object.values(this.table)}keys() {  return this.keyValues().map(valuePair=> valuePair.key)}values() {  return this.keyValues().map(valuePair=> valuePair.value)}

    首先 keyValues 方法会以数组的形式返回字典的所有键值,返回结果是一个 ValuePair 实例的数组。然后在这个函数的基础上,再分别获取对应的 key 数组和 value 数组。

    6.forEach 方法

    forEach 方法与数组的 forEach 方法功能一致,就是迭代所有元素,我们看一下迭代字典的所有值怎么实现:

    forEach(callFn) {  let valuePairs = this.keyValues()  for(let i = 0; i < valuePairs.length; i++) {    let result = callFn(valuePairs[i].key, valuePairs[i].value)    if(result === false) break;  }}

    首先传一个回调函数作为参数,然后遍历字典的长度,并在循环里调用这个回调函数。这里我们的一个设计是,如果在回调函数内返回 false,则会中断循环。

    7.clear, size, isEmpty 方法

    这个三个方法也比较基础:

    size() {  return Object.keys(this.table).length;}isEmpty() {  return this.size() === 0}clear() {  this.table = {}}

    三、使用字典

    前面我们写了不少方法实现了一个字典类,现在来使用一下:

    var dict = new Dictionary();dict.set("name", "赛罗");dict.set("color", "红蓝");dict.set("skill", "头标");

    添加了三个键值对,我们看一下基本方法的返回结果:

    console.log(dict.keys()); // ['name', 'color', 'skill']console.log(dict.values()); // ['赛罗', '红蓝', '头标']console.log(dict.size()); // 3console.log(dict.hasKey("color")); // trueconsole.log(dict.get("color")); // 红蓝console.log(dict.hasKey("like")); // falseconsole.log(dict.get("like")); // undefined

    看结果都没问题,再来一波遍历:

    dict.forEach((key, value) => {  console.log(key, value);  if (key === "color") return false;});// 打印结果:// name 赛罗// color 红蓝

    可见循环遍历是没有问题的,而且当函数执行返回 false 时,则会终止遍历,因此第三个键值对没有打印出来,结果达标。

    最后再看一下删除:

    // 删除键值对console.log(dict.remove("color")); // trueconsole.log(dict.remove("like")); // falseconsole.log(dict.remove("skill")); // trueconsole.log(dict.keyValues());  // [ValuePair]console.log(dict.hasKey("color")); falseconsole.log(dict.size()); 1// 清空字典dict.clear();console.log(dict.keyValues()); // []console.log(dict.isEmpty()); // true

    以上就是“JavaScript数据结构之字典方法怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: JavaScript数据结构之字典方法怎么用

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

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

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

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

    下载Word文档
    猜你喜欢
    • JavaScript数据结构之字典方法怎么用
      今天小编给大家分享一下JavaScript数据结构之字典方法怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、什么是字...
      99+
      2023-06-30
    • JavaScript 数据结构之字典方法
      目录一、什么是字典二、创建字典类1.hasKey 方法2.set 方法3.remove 方法4.get 方法5.keys, values, keyValues 方法6.forEach...
      99+
      2022-11-13
    • Redis数据结构之链表与字典的使用
      今天我们来聊一聊Redis中的链表与字典,具体如下: 链表 关于链表的基础概念其实你在学习Redis之前一定积累了不少,所以本文将默认你已经掌握了链表相关的基础知识,而Redis的链...
      99+
      2022-11-12
    • python之字典使用方法总结
      文章转载一个博客,文章概括字典很全,但是排版很乱,自己整理了一下数据字典 字典(dictionary)是除列表之外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过...
      99+
      2023-01-31
      使用方法 字典 python
    • Python数据结构之递归方法怎么用
      这篇“Python数据结构之递归方法怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python数据结构之递归方法怎么用...
      99+
      2023-06-30
    • python常用数据结构字典梳理
      目录dict字典字典定义与使用字典使用:创建字典使用:访问元素字典使用:操作元素字典使用:嵌套字典字典常用方法values()items()values()get()update()...
      99+
      2022-11-11
    • Java数据结构之字符串怎么用
      这篇文章主要介绍“Java数据结构之字符串怎么用”,在日常操作中,相信很多人在Java数据结构之字符串怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之字符串怎么用”的疑惑有所帮助!接下来...
      99+
      2023-06-30
    • Python实现列表转换成字典数据结构的方法
      本文实例讲述了Python实现列表转换成字典数据结构的方法。分享给大家供大家参考,具体如下: ''' [ {'symbol': 101, 'sort': 1, 'name': 'aaaa'}, ...
      99+
      2022-06-04
      数据结构 转换成 字典
    • Python学习之字典的常用方法总结
      目录字典添加与修改方法利用[]处理字典的内置函数update字典的内置函数setdefault关于字典的注意事项再强调尝试做一个小练习获取字典的key与value字典中的values...
      99+
      2022-11-13
    • 在matlab中怎么创建类似字典的数据结构
      本篇内容介绍了“在matlab中怎么创建类似字典的数据结构”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!matlab中创建类似字典的数据结构...
      99+
      2023-07-05
    • JavaScript数据结构与算法之栈详解
      目录1.认识栈2.面向过程方法源码编写栈2.1思考2.2需要实现的方法2.3源码实现,并调用类3.用面向对象的方法来源码书写3.1思考3.2需要实现的方法3.3源码及使用类4.总结1...
      99+
      2022-11-13
    • JavaScript数据结构之散列表怎么创建
      本文小编为大家详细介绍“JavaScript数据结构之散列表怎么创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript数据结构之散列表怎么创建”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、处...
      99+
      2023-06-30
    • javascript数据结构之多叉树经典操作的示例分析
      这篇文章给大家分享的是有关javascript数据结构之多叉树经典操作的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。多叉树可以实现复杂的数据结构的存储,通过遍历方法可以...
      99+
      2022-10-19
    • Java数据结构之List怎么用
      小编给大家分享一下Java数据结构之List怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!泛型什么是泛型泛型:即通过参数化类型来实现在同一份代码上操作多种数据类型。泛型是在C#2.0引入的。泛型(Genericity...
      99+
      2023-06-21
    • Javascript数据结构之栈和队列怎么实现
      本篇内容主要讲解“Javascript数据结构之栈和队列怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript数据结构之栈和队列怎么实现”吧!栈(stack)栈是一种具有 「...
      99+
      2023-06-30
    • JavaScript数据结构与算法怎么理解
      本篇内容主要讲解“JavaScript数据结构与算法怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript数据结构与算法怎么理解”吧!前言数据结构与算法这个词相信大家都听过、...
      99+
      2023-07-02
    • Python数据结构之递归方法详解
      目录1.学习目标2.递归2.1递归的基本概念2.2递归的重要性2.3递归三原则2.4递归的应用3.递归示例3.1列表求和3.2汉诺塔(Towers of Hanoi)问题1.学习目标...
      99+
      2022-11-10
    • python数据结构之递归方法讲解
      目录1.递归概念2. 递归三原则2.1 实现任意进制的数据转换今天我们来学习python中最为重要的内容之递归,对以往内容感兴趣的同学可以查看下面: python数据类型: pyth...
      99+
      2022-11-12
    • Java数据结构之KMP算法怎么实现
      这篇文章主要讲解了“Java数据结构之KMP算法怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数据结构之KMP算法怎么实现”吧!暴力匹配算法(Brute-Force,BF)这...
      99+
      2023-07-04
    • Java数据结构之队列怎么用
      这篇文章主要介绍了Java数据结构之队列怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:一、概述:1、说明:队列的原则时先进先出,就像生活中排队取票一样,谁排在...
      99+
      2023-05-31
      java
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作