首页 > 其他分享 >js中new Map ( )的使用场景

js中new Map ( )的使用场景

时间:2023-06-23 15:23:44浏览次数:42  
标签:map name Map value js let key new

当有一组数据:

let arr = [
  { name: '钢筋', value: 11 },
  { name: '水泥', value: 12 },
  { name: '混凝土', value: 13 },
  { name: '加气砖', value: 14 }
]

后台返回了一个13,但是我们想要拿到的是混凝土,一般的做法:

arr.forEach(item => {
  if (item.value == 13) {
    console.log(item.name); // 混凝土
  }
})

如果后台返回100个编号,我们难道要遍历100次,然后再通过if来判断吗?
如果可以把那一组数据转化成为对象

let obj = {
	11:'钢筋',
	12:'水泥',
	13:'混凝土',
	14:'加气砖'
}

然后通过obj[11]来进行获取对应的value值,是不是就更方便了,但是对象的key不可以是数字的,只能是变量或者字符串;
这时候就需要用到new Map()了,new Map创建的对象,里面的key可以是任何数据(如: {12: '水泥'});

let arr = [
  { name: '钢筋', value: 11 },
  { name: '水泥', value: 12 },
  { name: '混凝土', value: 13 },
  { name: '加气砖', value: 14 }
]

// 处理下数据
let newArr = []
arr.forEach(item => {
  newArr.push([item.value, item.name])
})

let arrMap = new Map(newArr)	// Map的参数格式是[[11:'钢筋'],[12:'水泥']],这样才可以通过get方法来获取对应的value
console.log(arrMap.get(13))    // 打印的是'混凝土'

/* 或者 */ 
let arr = [
  { name: '钢筋', value: 11 },
  { name: '水泥', value: 12 },
  { name: '混凝土', value: 13 },
  { name: '加气砖', value: 14 }
]
// 处理下数据
let arrMap = new Map()
arr.forEach(item => {
  arrMap.set(item.value, item.name)
})
console.log(arrMap.get(13));

get(key)方法获得的是value的值,而set(key,value)是往map对象中添加一个键值对
所以使用new Map的好处是可以直接通过get方法,来找出key对应的value;
new Map()除了set和get方法外,还有以下方法:
map.size(): 查询键值对数量;
map.has(key): 查询该map对象中是否含有该键对应的值,返回布尔类型;
map.delete(key): 删除某个键,返回true, 删除失败返回false;
map.clear(): 清楚所有键值对;

遍历方法:
1、 map.keys(): 遍历map的keys,用法如下:

let map = new Map([
  [1, '张三'],
  [2, "李四"],
  [3, "王五"]
])
let keys = map.keys();
for (i = 0; i < map.size; i++) {
  key = keys.next().value;
  console.log(key);
}

// 或者使用for...of...遍历
for (const key of keys) {
  console.log(key);
}

2、 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);
}

// 或者使用for...of...遍历
for (const key of values) {
  console.log(key);
}

来源:小智

标签:map,name,Map,value,js,let,key,new
From: https://www.cnblogs.com/strongerPian/p/17499196.html

相关文章

  • js:highlight.js实现代码的语法高亮
    highlight.jsSyntaxhighlightingfortheWeb译文:highlight.js为Web突出显示语法文档https://highlightjs.org/使用方式1、方式一:cdn<linkrel="stylesheet"href="http://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.7.0/styles/atom-one-da......
  • hashMap和hashTable的区别以及HashMap的底层原理?
    hashMap和hashTable的区别?1、继承的父类不同HashTable继承Dictionary类,而hashMap继承了AbstractMap类,但是二者都实现了map接口。2、线程安全性不同 Hashtable线程安全,因为它每个方法中都加入了Synchronize。HashMap是线程不安全的。1HashMap底层是一个Entry数组,当发生hash......
  • 【并发编程】为什么Hashtable和ConcurrentHashMap 是不允许键或值为 null 的,HashMap
    原文链接:https://blog.csdn.net/cy973071263/article/details/126354336目录一、从源码的角度分析原因1.1Hashtable1.2ConcurrentHashMap1.3HashMap二、从架构设计的角度分析原因2.1为何不支持null值?2.1.1ConcurrentHashMap2.1.2Hashtable2.1.3HashMap2.2......
  • jstack Dump 日志文件分析
    jstackDump日志文件中的线程状态dump文件里,值得关注的线程状态有:1.死锁,Deadlock(重点关注)2.Runnable3.等待资源,Waitingoncondition(重点关注)4.Waitingonmonitorentry(重点关注)5.暂停,Suspended6.Object.wait()或TIMED_WAITING7.阻塞,Blocked(重点......
  • ConCurrentHashMap在1.7和1.8区别
    ConCurrentHashMap1.8相比1.7的话,主要改变为:去除Segment+HashEntry+Unsafe的实现,改为Synchronized+CAS+Node+Unsafe的实现其实Node和HashEntry的内容一样,但是HashEntry是一个内部类。用Synchronized+CAS代替Segment,这样锁的粒度更小了,并且不是每......
  • idea的创建与使用mapper映射文件
    一.创建mapper映射文件在设置中模板<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="&......
  • 遍历Json
    privatevoidSetShpFcSaveC5s(ShpFcSavemodel){if(string.IsNullOrWhiteSpace(model.C5)==false){JsonDocumentdocument=JsonDocument.Parse(model.C5);foreach(JsonElementjsonElementindocument.RootElement.EnumerateArray())......
  • .NET 6 中 System.Text.Json 的新特性
    1支持忽略循环引用在.NET6之前,如果 System.Text.Json 检测到循环引用,就会抛出 JsonException 异常。在.NET6中,你可以忽略它们。Categorydotnet=new(){Name=".NET6",};CategorysystemTextJson=new(){Name="System.Text.Json",Parent=......
  • MapBox账号注册教程
    MapBox是一个强大的、完整的3D地图框架,而且对于大多数使用者是免费的。但mapbox禁止中国地区的新用户注册,为源地理为您分享如何注册MapBox账号,主要使用魔法和信用卡两个工具。注册成功后,账号在国内环境下可以正常使用。一、基本信息注册前,用户需要提供的必要信息包括:姓名(Ful......
  • fixmap 地址映射
    在系统启动的汇编阶段,为kernelimage、dtb建立了临时页表,开启了MMU,进入了虚拟空间的世界,进入到start_kernel,内核要访问内存,要访问IO地址空间,那么就必须要为物理地址建立页表,以实现物理地址和虚拟地址之间的映射。在内核初始化前期,内存管理系统还未初始化,现在除了临时页表外,主要......