JavaScript一种新的数据结构类型Map
什么是map
它类似于对象,是键值对的集合,但键的范围不局限在于字符串。各种类型的值(包含对象)都可以作为键。
如果同一个键被多次赋值,后面的值将会覆盖其那面的值。如果读取一个未知的键,返回的是undefined.
具有极快的查找速度,它的查找的方式比遍历的方式更加的块。
创建map的时候需要:1.初始化Map需要一个二维数组 2.或者直接初始化一个空Map。
通过map可以快速获取某个键的值【场景使用】
它的常见方法 set()添加 get()获取值 delete()删除值 has()判断是否有某个值 clear()方法清除所有成员,没有返回值。
场景描述 [项目中可以使用]
如果我们我们想要获取某个人的成绩, 必须要通过遍历的方式去获取成绩。
并且Array越长,耗时越长。
但是如果使用map就不需要了。只需要一个“名字”-“成绩”的对照表,
let arr = [{
name: '张三',
grade: 100
}, {
name: '李四',
grade: 100
}, {
name: '王五',
grade: 100
}]
//这个是map
var m = new Map([
['张三', 100],
['李四', 97],
['王五', 85]
]);
let chengjizs = m.get('张三');
console.log('成绩是', chengjizs)
如何快速获取后端返回来的某值
//假设后端返回来了很多数据,我们需要获取某一个值。
//可以先将数据转为map类型的数据结构 [[key:value]] 一个二维数组
//然后通过 数据源.get(key) 的方式获取值
let backArr = [{
name: '张三',
grade: 100
}, {
name: '李四',
grade: 100
}, {
name: '王五',
grade: 100
}]
let newArr = []
backArr.forEach(item => {
newArr.push([item.name, item.grade])
})
// Map的参数格式是[[key:value],[key:value]]这样才可以通过get方法来获取对应的value
let arrMap = new Map(newArr)
console.log(arrMap.get('张三'))
创建Map以及Map的常见方法
// 初始化Map需要一个二维数组, 或者直接初始化一个空Map。
var m = new Map(); // 这个是一个空Map
console.log(m.set('Aa', 67)); // 添加新的key-value
console.log(m.has('Aa')); // 是否存在key 'Aa'输出的值是:true
console.log(m.get('Aa')); // 获取Aa的67
console.log(m.delete('Aa')); // 删除key 'Aa'
console.log(m.get('Adam')); // 读取未知的值 undefined
console.log(m.clear()); //清除所有值
set()添加 get()获取值 delete()删除值 has()判断是否有某个值
获取map对象中所有的key值,并且把它转为为一个数组
var m = new Map([
['张三', 100],
['李四', 97],
['王五', 85]
]);
let keysName = m.keys(); //返回的所有key值,但却不是一个数组
console.log(Array.from(keysName)) //转为为一个数组
Map 结构原生提供三个遍历器生成函数和一个遍历方法。
Map.prototype.keys():返回map的所有键名。
Map.prototype.values():返回map的所有键值。
Map.prototype.entries():返回map的所有成员。
Map.prototype.forEach():遍历Map的所有成员。
Map 结构转为数组结构,比较快速的方法是使用扩展运算符(...)
const map = new Map([
[1, 'one'],
[2, 'two'],
[3, 'three'],
]);
let keyArr = [...map.keys()]
console.log(keyArr) //[1, 2, 3]
let contArr = [...map.values()]
console.log(contArr) //['one', 'two', 'three']
let arr1 = [...map.entries()]
console.log(arr1)
// [[1,'one'], [2, 'two'], [3, 'three']]
let arr2 = [...map]
console.log(arr2)
// [[1,'one'], [2, 'two'], [3, 'three']]
Map 转为对象
如果所有 Map 的键都是字符串,它可以无损地转为对象。
function strMapToObj(strMap) {
let obj = Object.create(null);
for (let [k, v] of strMap) {
obj[k] = v;
}
return obj;
}
const myMap = new Map([
['grade1', 100],
['grade2', 97],
['grade3', 85]
])
console.log(strMapToObj(myMap))
对象转为 Map 可以通过Object.entries()
let obj = {
"age": 12,
"name": '张三'
};
let map = new Map(Object.entries(obj));
console.log('map', map)
或者 我们自己写一个方法
function objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
let newMap=objToStrMap({
yes: true,
no: false
})
console.log(newMap)
通过forEach循环map中的每一个值,以及key值
var m = new Map([
['张三', 100],
['李四', 97],
['王五', 85]
]);
m.forEach(function(value,index) {
console.log("value", value,index); //100 张三 这种
})
map.values() 遍历map的values
let map = new Map([
[1, '张三'],
[2, "李四"],
[3, "王五"]
])
let values = map.values();
for (i = 0; i < map.size; i++) {
value = values.next().value;
console.log(value); // 张三 李四 王五
}
JavaScript一种新的数据结构类型Map的更多相关文章
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...
- ES6 一种新的数据结构--Map跟Objct的区别
var map1=new Map(); var keys={key:'val'}; map1.set(keys,'content'); ==> {Object {key: "val&q ...
- Source Insight添加新的文件类型
1.前言 Source Insight这个软件工具功能非常强大,很适合用来分析一些大型的code工程,例如Linux内核源码,本文将简单介绍如何在Source Insight工程中添加一种新的文件类型 ...
- javascript四种类型识别的方法
× 目录 [1]typeof [2]instanceof [3]constructor[4]toString 前面的话 javascript有复杂的类型系统,类型识别则是基本的功能.javascrip ...
- python定义一种新类型的元组
# 定义一种新类型的元组,只保留int类型,切只大于0的元素 # 例如:IntTuple([1,-1,"abc",6,['x','y'],3])==>(1,6,3) # 解决 ...
- 四种常见的数据结构、LinkedList、Set集合、Collection、Map总结
四种常见的数据结构: 1.堆栈结构: 先进后出的特点.(就像弹夹一样,先进去的在后进去的低下.) 2.队列结构: 先进先出的特点.(就像安检一样,先进去的先出来 ...
- ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环
ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. va ...
- Java核心数据结构(List,Map,Set)原理与使用技巧
JDK提供了一组主要的数据结构实现,如List.Map.Set等常用数据结构.这些数据都继承自 java.util.Collection 接口,并位于 java.util 包内. 1.List接口 最 ...
- Java同步数据结构之Map概述及ConcurrentSkipListMap原理
引言 前面介绍了CopyOnWriteArraySet,本来接着是打算介绍ConcurrentSkipListSet,无耐ConcurrentSkipListSet的内部实现其实是依赖一个Concur ...
- ES6之新的数据结构
Set Set 类似于数组,是一种集合的数据结构,和 Array 之间最大的区别是: Set中所有的成员都是唯一的. 可以把Set想象成是一个: 既没有重复元素,也没有顺序概念的数组. Set 本身是 ...
随机推荐
- PPT 商务PPT怎么做
商务报告:公司专属PPT模板怎么做? 通过LOGO 提取主色调 搜集相关元素 通过LOGO 提取主色调 搜集相关元素 下载图片使用 建立版面
- Kubernetes(K8S) helm 安装
Helm 是一个 Kubernetes 的包管理工具, 就像 Linux 下的包管理器, 如 yum/apt 等, 可以很方便的将之前打包好的 yaml 文件部署到 kubernetes 上. Hel ...
- 基于分发与计算的GRTN全球实时传输网络
一张能同时满足「分发」与「计算」需求的网. 从直播趋势看「分发」与「计算」 阿里云直播产品架构图中,主要分为端和云两个部分:在端侧,主要包含推流端和播放端:在云侧,一是基于分布式节点构建的传输网,二是 ...
- POJ 3268 Silver Cow Party 题解 《挑战程序设计竞赛》
POJ 3268 Silver Cow Party 奶牛派对:有分别来自 N 个农场的 N 头牛去农场 X 嗨皮,农场间由 M 条有向路径连接.每头牛来回都挑最短的路走,求它们走的路的最大长度? 们其 ...
- Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) (个人题解)
Codeforces Round #687 (Div. 2, based on Technocup 2021 Elimination Round 2) A. Prison Break https:// ...
- Codeforces Round #689 (Div. 2, based on Zed Code Competition) 个人题解
1461A. String Generation void solve() { int n, k; cin >> n >> k; for (int i = 1; i <= ...
- FastDFS 海量小文件存储解决之道
作者:vivo互联网服务器团队-Zhou Changqing 一.FastDFS原理介绍 FastDFS是一个C语言实现的开源轻量级分布式文件系统 . 支持 Linux.FreeBSD.AID 等Un ...
- 以API 配置的方式来配置你的 Dubbo 应用
package com.aswatson.csc.member.conf; import com.aswatson.csc.member.service.MemberCardService; impo ...
- java读取解析endnote文件
有些项目中会要求代码解析endnote文献资料获取一些标准的信息,例如XX在某著名期刊上发表了某篇文章,关于发表文章的这个事情的描述就会给坐着一个endnote文件来记录文章名称.作者.期刊名称.出版 ...
- 《3D编程模式》写书-第2次记录
大家好,目前我已经完成了"拼接模式"."撤销重做模式"."ECS模式"的初稿 下面会给出它们的使用场景,如果您正好能用到,请联系我提前阅读模 ...