博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构和算法javascript描述-字典(第7章)
阅读量:5844 次
发布时间:2019-06-18

本文共 2163 字,大约阅读时间需要 7 分钟。

7 字典

字典是一种以键值对(key-value)存储数据的数据结构。这个数据结构在js中非常普遍,比如js中的对象就是这个数据结构,写过js的人应该对字典非常熟悉。

原书是用数组构建字典的,现在已经8012年了,再用数据一把梭就很low了,这里我们使用Map来构造字典这个数据结构。

7.1 字典的方法和属性

字典的方法和属性 含义
size(属性) 字典的大小
set(方法) 向字典中添加数据
get(方法) 在字典中查找数据
has(方法) 判断字典中是否有某个数据
delete(方法) 删除字典中的数据
clear(方法) 清空字典

7.2 字典的程序实现

其实es2015中,字典(map)已经默认存在了,没有必要再重新实现一遍。我在这里直接讲解下map吧。

7.2.1 map和对象的区别

在js中map和对象是非常像的,都是采用键值对的数据结构。它们不同点是它们的key值。对象的key值只允许是字符串,而map的key值可以是字符串、数字、对象等各种类型。

let m = new Map()const key = {}const key2 = {}m.set(key, 'a')m.set(key2, 'b')console.log(m.get(key)) // aconsole.log(m.get(key2)) // blet obj = {}obj[key] = 'a' obj[key2] = 'b' console.log(obj[key]) // bconsole.log(obj[key2]) // b复制代码

使用对象存储数据的时候,对象会默认把key值转成字符串,key和key2转成字符串都是[object Object],所以obj[key]和obj[key2]获取的值是相同的都是b。而map是直接使用对象当做键值的,所以mapget(key)和map.get(key2)获取的是a和b

7.2.3 map中的属性和方法

size属性

size属性返回Map结构的成员总数

let m = new Map()m.set('a', 'a1')m.set('b', 'b1')console.log(m.size) // 2复制代码

set(key,value)

set方法设置键名key对应的键值为value,然后返回整个map结构,如果key值已经存在,则键值会更新

let m = new Map()m.set('a', 'a1')m.set('a', 'b1')console.log(m) // Map(1) {"a" => "b1"}复制代码

get(key)

获取key对应的键值,如果key不存在,则返回undefined

let m = new Map()m.set('a', 'a1')console.log(m.get('b')) // undefined复制代码

has(key)

has方法返回一个布尔值,表示某个键是否在map对象中

let m = new Map()m.set('a', 'a1')console.log(m.has('b')) // false复制代码

delete(key)

delete方法删除某个键,如果删除成功则返回true,否则返回false

let m = new Map()m.set('a', 'a1')m.set('b', 'b1')console.log(m.delete('b')) // trueconsole.log(m.delete('c')) // false复制代码

clear()

clear方法清空所有的成员,没有返回值

let m = new Map()m.set('a', 'a1')m.set('b', 'b1')console.log(m) // Map(2) {"a" => "a1", "b" => "b1"}m.clear()console.log(m) // Map(0) {}复制代码

7.3 对map的遍历

  • keys() 返回键名遍历器
  • values() 返回键值遍历器
  • entries() 返回所有成员的遍历器
  • forEach() 遍历map的所有成员
let map = new Map()map.set('a', 'a1')map.set('b', 'b1')for (let key of map.keys()) {  console.log(key)}// a// bfor (let value of map.values()) {  console.log(value)}// a1// b1for (let [key, value] of map.entries()) {  console.log(key, value)}// a a1// b b1map.forEach((value, key) => {  console.log(value, key)})// a1 a// b1 b复制代码

原书是使用数组模拟字典的,可能是因为写该书的时候,es2015还没出现。es2015中的Map对象就是字典,而且具有良好的api,以后写代码可以省去省去很多麻烦。

转载地址:http://jjqcx.baihongyu.com/

你可能感兴趣的文章
LoadRunner中进程运行和线程运行区别
查看>>
hihoCoder 1257 Snake Carpet(很简单的构造方法)
查看>>
DirectSound 混音的实现
查看>>
数据结构实验之栈四:括号匹配
查看>>
EXCEL如何进行多条件的数据查找返回
查看>>
gtk+学习笔记(五)
查看>>
PHP 手册
查看>>
cocos2d-x学习 之一
查看>>
JavaScript面向对象-静态方法-私有方法-公有方法-特权方法,学习
查看>>
iOS 时间戳的转换
查看>>
图片处理--熔铸特效
查看>>
NULL的陷阱:Merge
查看>>
MQ消息队列之MSMQ
查看>>
hdu 5441 (并查集)
查看>>
【题解】【BST】【Leetcode】Unique Binary Search Trees
查看>>
【题解】【字符串】【BFS】【Leetcode】Word Ladder
查看>>
加快网站访问速度--jquery.js
查看>>
IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)
查看>>
关于Retinex图像增强算法的一些新学习。
查看>>
工厂模式
查看>>