2.数据结构map.html

map是ES提供的一种字典数据结构。
字典结构——用来存储不重复key的hash结构。不同于集合(set)的是,字典使用的是键值对的形式来存储数据
JavaScript对象(object:{})只能用字符串来当key,这对使用带来了不便
为了解决这个问题,ES6提供了map数据结构。其类似于对象,也是键值对的集合,但“key”的范围不仅限于字符串,而是各种类型的值都可以当做key。也就是说,object提供了“字符串-值”的对应结构,map则提供的是“值-值”的对应。是一种更加完善的hash结构
对象对map结构的支持演示
var data1={a:1},
      data2={b:2},
      obj={};
      //为obj对象添加属性(将data1和data2作为属性名)
      obj[data1]=1;
      obj[data2]=2;
      console.log(obj);
可以看到结果并非我们需要的
创建一个map
const map=new Map([
     [‘a‘,1],
     [‘b‘,2]
]);
console.log(map);
上面的[‘a‘,1]代表,将a作为key,1作为value声明
那么是否[‘a‘,1]中能写入第三个元素呢?答案是可以的,但是!ES6不会理你
map类的属性——size     用于获取map的长度
console.log(map.size);
map类的方法——set   Map.set(key,value)  设置键名key对应的键值为value,然后返回整个map结构。如果key已经有值,则键值会被更新,否则生成新的键 
console.log(map.set([1,2,3],‘3元素的数组‘));
//也可以链式添加
map.set(‘name‘,‘张三‘).set(‘age‘,28);
console.log(map);
map类的方法——get  Map.get(key)    读取key对应的键值,如果获取不到则返回undefined
console.log(map.get(‘name‘));
获取数组对应的键值——后续补充
map类的方法——delete   Map.delete(key)     删除某个键,如果删除成功返回true,否则返回false
console.log(map.delete(‘name‘));
map类的方法——has      Map.has(key)        判断某个键是否存在于map中,返回布尔值
console.log(map.has(‘age‘));
map类的方法——clear    Map.clear()         清除所有数据,没有返回值
map.clear();
map类的方法——keys     Map.keys()          返回键名的遍历器
console.log(map.keys());
map类的方法——values   Map.values()        返回键值的遍历器
console.log(map.values());
map类的方法——entries  Map.entries()       返回键值对的遍历器
console.log(map.entries());
map类的方法——forEach  map.forEach(function(){})   使用回调遍历每一个成员
map.forEach(function (value, key, map) {
      console.log(`这是key:${key},这是value:${value},这是map本身:${map}`);
})
Map在使用过程中需要注意的地方
1.在js中NaN是不等于自身的一种数据类型,但是在map中,多次set以NaN为key的数据的时候,会产生覆盖的行为。说明map会将NaN视为同一个键
map.set(NaN,1).set(NaN,10);
console.log(map);
2.如果map数据中以空对象作为key({})的话,会发现,出现了两个key,这是因为每一个{}都是全新的引用,其不同的是内存地址。而反观上面的NaN,其地址只有一个,所以才会出现覆盖的情况
map.set({},1).set({},2);
console.log(map);


原文地址:https://www.cnblogs.com/sky903700252/p/8798309.html

时间: 2024-10-11 21:32:17

2.数据结构map.html的相关文章

Java数据结构Map,List,Set及Queue相关的类图

闲来无事,把util包中相关的数据结构的类图及其关系画了一下,给大家分享一下. 总览图:  Map:  List and Set: Queue: Java数据结构Map,List,Set及Queue相关的类图

JAVA数据结构——Map之HashMap

JAVA数据结构--Map之HashMap 一.原型及简介 原型:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable 简介:HashMap基于散列表实现的一个key-value数据结构,能够实现通过key值快速查找.HashMap继承自AbstractMap抽闲类,实现了Map接口. 二.数据结构原理介绍 如下图所示,HashMap

ES6——数据结构 Map

数据结构 Map 字典: 用来存储不重复key的 Hash结构.不同于集合(Set)的是,字典使用的是 [键,值] 的形式来存储数据的. JavaScript 的对应那个(Object:{}) 只能用字符串当做键.这给他的使用带来了很大的限制. var data1={a:"1"},data2={b:"2"},obj={}; obj[data1]=1; obj[data2]=2; console.log(obj); 1.创建一个 Map const map=new M

Java中常见数据结构Map之HashMap

之前很早就在博客中写过HashMap的一些东西: 彻底搞懂HashMap,HashTableConcurrentHashMap关联: http://www.cnblogs.com/wang-meng/p/5808006.html HashMap和HashTable的区别: http://www.cnblogs.com/wang-meng/p/5720805.html 今天来讲HashMap是分JDK7和JDK8 对比着来讲的, 因为JDK8中针对于HashMap有些小的改动, 这也是一些面试会经

ES6新增数据结构Map的用法

Javascript的Object本身就是键值对的数据结构,但实际上属性和值构成的是”字符串-值“对,属性只能是字符串,如果传个对象字面量作为属性名,那么会默认把对象转换成字符串,结果这个属性名就变成”[object Object]“. ES6提供了”值-值“对的数据结构,键名不仅可以是字符串,也可以是对象.它是一个更完善的Hash结构. 特性 1.键值对,键可以是对象. const map1 = new Map() const objkey = {p1: 'v1'} map1.set(objk

Java中常见数据结构Map之LinkedHashMap

前面已经说完了HashMap, 接着来说下LinkedHashMap. 看到Linked就知道它是有序的Map,即插入顺序和取出顺序是一致的, 究竟是怎样做到的呢? 下面就一窥源码吧. 1, LinkedHashMap基本结构 LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap. LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序.此实现提供所有可选的映射操作,并允许使用n

【GoLang笔记】实例分析GoLang built-in数据结构map的赋值引用行为

备注1:本文旨在介绍Go语言中map这个内置数据结构的引用行为,并用实例来说明如何避免这种引用行为带来的"副作用". 备注2:文末列出的参考资料均来自GoLang.org官方文档,需翻墙访问. 1. map internals map是go中内置的数据结构,关于其语法规则,可以查看language specification中这里的说明,或者查看Effective Go中关于Maps的说明,此处略过. map的底层是用hashmap实现的(底层hashmap源码路径为src/pkg/r

数据结构 - Map接口

简介 我们平时最常用的数据结构之一,内部是有键值对构成,Map集合中不能包含重复的键,但是可以包含重复的值. Map接口 public interface Map<K,V> Map 未实现方法 // 获取元素个数 int size(); // 是否为空 boolean isEmpty(); // 是否包含key boolean containsKey(Object key); // 是否包含value boolean containsValue(Object value); // 根据key取

cf519D . A and B and Interesting Substrings 数据结构map

题意: 已知26个小写字母有各自的权值(正,负,或0) 现在给出一个字符串,长度<=1e5 问这个字符串有多少个子串满足: 开头的字母和结尾的字母一样 字符串除了开头和结尾的字母外,其余的字母的权值和为0 本来是一道水题,一看就知道大体的思路了,结果硬是搞了一个多小时 先是用set,发现超时了,改为用map 思路: 1.我们先预处理这个字符串的权值的前缀和 sum[i]表示从字符串的起点到i的权值和 2.我们要找到的子串,设以l开头和r结尾,则有 str[r] == str[l] 和 sum[r