第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 【数据结构】什么是哈希表?如何运用于前端项目 算法实践

【数据结构】什么是哈希表?如何运用于前端项目 算法实践

时间:2022-06-11 09:51:45

相关推荐

【数据结构】什么是哈希表?如何运用于前端项目 算法实践

目录

对象与哈希表的区别

哈希值的方法

运用的场景

场景1:数组去重

场景2:统计字符串中不同字符出现的次数

场景3:输出两个数组的交集,输出结果中的每个元素一定是唯一的

哈希表的定义

哈希表,也叫散列表,是可以根据关键码值(key)而直接进行访问访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在JavaScript中,对象就跟哈希表很相似

对象与哈希表的区别

对象的键值必须是字符串,而哈希可以是任意值对象中的键值是无序的,而哈希是有序的对象中的键值个数需要手动去获取,而哈希可以直接获取到键值个数哈希可以比对象多存储50%的键值对

哈希值的方法

set方法,用于给键值赋值

let hash = new Map()hash.set(bob, true) // Map(1){bob => true}

get方法,获取某个键值对应的映射数据,返回数据

let hash = new Map()hash.set(bob, true) // Map(1){bob => true}hash.get(bob) // truehash.get(2) // 获取不存在键值的数据会返回undefined

has方法,判断是否存在某个键值,返回布尔值

hash.has(bob) // truehash.has(89) // false

delete方法,删除键值

hash.delete(1) // 删除已有键值对

size属性,获取哈希表键值对数量

hash.size // 2

运用的场景

场景1:数组去重

// 哈希表实现数组去重/*** @param {Array[]} oldArr* @return {Array[]}*/var uniq = function (oldArr) {// 增加代码的健壮性if (!oldArr || !oldArr instanceof Array ) {oldArr = []}let hash = new Map()let newArr = []for (let i = 0; i < oldArr.length; i++) {if (!hash.get(oldArr[i])) {newArr.push(oldArr[i])hash.set(oldArr[i], 1)}}return newArr}

场景2:统计字符串中不同字符出现的次数

/*** @param {string} str* @return {Map}*/var statistics = function (str) {if (!str.length) {return }let hash = new Map() // 分割字符串为数组let tempArr = str.split('')for (let i = 0; i < tempArr.length; i++) {// 设置每个键值的映射数值,存在则+1,不存在则设置为1hash.set(tempArr[i], (hash.get(tempArr[i]) || 0) + 1)}return hash}let str = 'abbbbcccccddddd'statistics(str) // Map(4){'a' => 1, 'b' => 4, 'c' => 5, 'd' => 5}

场景3:输出两个数组的交集,输出结果中的每个元素一定是唯一

/*** @param {number[]} nums1* @param {number[]} nums2* @return {number[]}*/var intersection = function(nums1, nums2) {if (nums1.length === 0 || nums2.length === 0) {return []}if (nums1.length < nums2.length) {const temp = nums1;nums1 = nums2;nums2 = temp}let hasSet = new Set(nums1)let resSet = new Set()for (let i = 0; i < nums2.length; i++) {hasSet.has(nums2[i]) && resSet.add(nums2[i])}return Array.from(resSet)};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。