应用办公生活信息教育商业
投稿投诉
商业财经
汽车智能
教育国际
房产环球
信息数码
热点科技
生活手机
晨报新闻
办公软件
科学动态
应用生物
体育时事

JavaScript选择map而非对象(object)存储键

  如果有一件事我知道如何做好,那就是如何跟上变化。因为如果你不这样做,你就会落后。我亲身体会到,使用熟记在心的东西,而不是尝试新的东西,是多么舒服。
  但不适是让你成长的原因,无论是作为普通人还是开发者。
  让我们先深入看看新Map能教给我们什么。什么是Map对象?
  以下是holysource(MDN)的定义:
  Map对象保存着键值对,并记住键的原始插入顺序。任何值(包括对象和基本类型值)都可以用作键或值。
  简单来说,Map是JavaScript原生的散列或字典数据结构。语法:MapvsObject
  Andrej发布了一个方便的备忘单,很好地展示了它们的语法差异。
  原因一:你不会意外地覆盖默认的Key
  Map
  默认情况下,Map不包含任何键。这是一个全新的开始。它只有你放进去的东西。
  不多也不少。
  Object
  默认情况下,对象都有自己的原型,因此它包含的默认键可能与你自己的键发生冲突。
  在创建新对象时,可以通过传递null作为原型绕过该方法:
  看看它们的区别:NewObject
  NewObject带有null原型
  原因2:它可以接受任何类型的键
  Map
  map接受任何类型的键。这包括函数、对象和所有基本类型(string、number、boolean、symbol、undefined、null和bigint)。letobj{a:a};letfunc()hey;也可以使用数组语法一次初始化多个值letmapnewMap(〔〔123,true〕,〔true,123〕,〔obj,object〕,〔func,function〕〕)map。keys()123,true,Object,()heymap。get(obj)objectmap。get(func)functionmap。get({a:a})undefined对象和函数是按引用存储的,所以{a:a}和obj是不同的对象)
  Object
  对象的键必须是字符串或符号(Symbol)。letobj1{a:a};letfunc()hey;letobj{123:true,true:123,obj1:object,func:function};Object。keys(obj)〔123,true,obj1,func〕转换所有的key为字符串obj〔func〕undefinedobj〔func〕function原因三:map是可迭代的
  Map
  map本身是可迭代的。这意味着可以使用for或。foreach()循环遍历它们。constmapnewMap();map。set(0,zero)。set(1,one);youcanchain。set()for(const〔key,value〕ofmap){console。log(key:{key},value:{value});}key:0,value:zerokey:1,value:one如果你只想要values或者keysfor(constkeyofmap。keys()){ormap。values()console。log(key);}01map。forEach((value,key)console。log(key:{key},value:{value}));key:0,value:zerokey:1,value:one
  Object
  对象是不可迭代的,尽管可以使用forin和Object。Entries()迭代它们。letobj{0:zero,1:one}for(letkeyinobj){console。log(key:{key},value:{obj〔key〕})}key:0,value:zerokey:1,value:oneObject。entries(obj)。forEach((item)console。log(key:{item〔0〕},value:{item〔1〕}))key:0,value:zerokey:1,value:one原因四:Map可以与数组(Array)合并,并转换为数组
  Map
  map和数组是100兼容的,可以直观地从一个映射到另一个。
  下面展示了如何将Map转换为数组letmapnewMap(〔〔1,one〕,〔2,two〕〕);Array。from(map)〔〔1,one〕,〔2,two〕〕和你最初传入的数组一模一样或者你可以使用展开运算符constnewArr〔。。。map〕;
  数组映射到Map中letarr〔〔1,one〕,〔2,two〕〕;newMap(arr);{1one,2two}
  下面展示了如何合并一个Map和一个ArrayletmapnewMap(〔〔1,one〕,〔2,two〕〕);letarr〔3,three〕letcombinedMapnewMap(。。。map,arr);{1one,2two,3three}letcombinedArr〔。。。map,arr〕;〔〔1,one〕,〔2,two〕,〔3,three〕〕
  Object
  将对象合并到数组中letobj{1:one,2:two};Array。from(obj)〔〕你必须这样Array。from(Object。entries(obj))〔〔1,one〕,〔2,two〕〕或者〔。。。Object。entries(obj)〕〔〔1,one〕,〔2,two〕〕原因五:你可以很容易地检查其大小
  Map
  Map有一个内置的size属性,可以返回其大小。letmapnewMap(〔1,one〕,〔true,true〕);map。size2
  Object
  要检查对象的大小,必须将object。keys()和。length结合起来letobj{1:one,true:true};Object。keys(obj)。length2缺点呢?没有用于序列化和解析的原生方法
  Map
  map原生不支持序列化或解析JSON。
  文档建议使用可以传递给JSON。stringify(obj,replacer)的replacer参数来实现你自己的方法。和传入JSON。parse(string,reviver)的reviver
  Object
  你可以使用原生的JSON。stringify()和JSON。parse()来序列化和解析JSON对象。2个替换objectwithmap的例子
  1计算电子商务购物车的总价格和商品
  这是JavaScript。reduce()函数完整指南中的一个例子
  给定下面的数组constshoppintCart〔{price:10,amount:1},{price:15,amount:3},{price:20,amount:2},〕
  我们希望返回一个类似{totalItems:6,totalPrice:45}的对象。
  这是原始代码shoppintCart。reduce((accumulator,currentItem){return{totalItems:accumulator。totalItemscurrentItem。amount,totalPrice:accumulator。totalPricecurrentItem。amountcurrentItem。price,}},{totalItems:0,totalPrice:0}初始化对象){totalItems:6,totalPrice:45}
  这是使用Map的版本shoppintCart。reduce((accumulator,currentItem){accumulator。set(totalItems,accumulator。get(totalItems)currentItem。amount);accumulator。set(totalPrice,accumulator。get(totalPrice)currentItem。price);returnaccumulator;},newMap(〔〔totalItems,0〕,〔totalPrice,0〕〕)){totalItems6,totalPrice45}
  2从数组中删除重复对象的另一种方法
  这是我在开始学习JavaScript时在制作bookshelf应用程序时用到的一段代码。
  通过搜索如何从数组中删除重复对象,我找到了下面分享的示例。
  这是一个包含一个重复对象的数组constbooks〔{id:1,title:HowToWinFriendsAndInfluencePeople,author:DaleCarnegie},{id:1,title:HowToWinFriendsAndInfluencePeople,author:DaleCarnegie},{id:2,title:TheAlchemist,author:PauloCoelho},〕
  下面是一种删除重复内容的特殊方法:constuniqueObjsArr〔。。。newMap(books。map(book〔book。id,book〕))。values()〕;
  上面的单行代码发生了太多事情。让我们把它分解成块,这样它就容易消化。1。将数组映射为一个包含id和book的数组constarrayOfArraysbooks。map(book〔book。id,book〕)arrayOfArrays:〔〔1,{id:1,title:HowToWinFriendsAndInfluencePeople,author:DaleCarnegie}〕,〔1,{id:1,title:HowToWinFriendsAndInfluencePeople,author:DaleCarnegie}〕,〔2,{title:Alchemist,author:PauloCoelho}〕〕2。由于键必须是唯一的,重复的键会被自动删除constmapOfUniqueObjectsnewMap(arrayOfArrays)mapOfUniqueObjects:{1{id:1,title:HowToWinFriendsAndInfluencePeople,author:DaleCarnegie},2{title:Alchemist,author:PauloCoelho}}3。将这些值转换回数组。constfinalResult〔。。。mapOfUniqueObjects。values()〕;finalResult:〔{id:1,title:HowToWinFriendsAndInfluencePeople,author:DaleCarnegie},{id:2,title:TheAlchemist,author:PauloCoelho}〕结论
  如果需要存储键值对(散列或字典),请使用Map。
  如果你只使用基于字符串的键,并且需要最大的读取性能,那么对象可能是更好的选择。
  除此之外,用你想用的任何东西,因为,在一天结束的时候,这只是一个在互联网上随便一个人的文章。
  以下是我们介绍的内容:什么是Map对象?语法:MapvsObject原因一:你不会意外地覆盖默认的密钥原因2:它可以接受任何类型的键原因三:map是可迭代的原因四:映射可以与数组合并,并转换为数组原因五:你可以很容易地检查尺寸缺点呢?没有用于序列化和解析的原生方法两个用Map替换Object的例子
  感谢您的阅读!

PGC总决赛12席确定PCL和北美成垫底赛区欧韩两赛区强势随着第三周周决赛在昨日落下帷幕,PGC2021全球总决赛即将迎来新的高潮。提前确定总决赛名额的12支队伍已经可以好好准备总决赛并率先分配跳点,而在本周四,将会迎来剩余队伍的最终……彗星的公转轨道与太阳系其他天体有何不同?答:说成特殊行吗?反正这么说了,给不给分就说了不算了。如果嫌少,就再说说?在太阳引力作用下,八大行星、矮行星,以及众多的小行星、彗星等天体,都环绕太阳公转。话是这么……降尿酸最厉害的草药,都很便宜尿酸是人体嘌呤代谢产生的正常产物,之所以谈到降尿酸,是因为当尿酸的代谢不足导致尿酸累积过多的时候,会造成很严重的后果高尿酸性关节炎,也就是常说的痛风。所以今天给大家介绍几种降尿……夜读丨蜉蝣不知有明天,蚂蚱不知有明年,青蛙不知外面的世界绿标收听朗读音频文苏墨一只小小的蜉蝣,生命周期只有短短一天。蜉蝣和蚂蚱交了朋友,很欢喜地在一起玩了一天。到了晚上,蚂蚱说我要回家了,明天早上见。蜉蝣不解:明天是什么……日本女乒个人荣誉榜NO。1平野美宇2016年世界杯女单冠军2017年亚锦赛女单冠军2017年全日本锦标赛女单冠军NO。2早田希娜2021年卡塔尔多哈亚锦赛女单冠军……妈妈全职10年在家带娃,顺便修炼了厨艺,每天早餐换着花样做我是一名全职妈妈,全职在家带娃已经有10年之久了!这10年除了带孩子,顺便还修炼了一下厨艺,以前饭菜能做熟就不错了,现在各种家常菜已经做得很熟练了。尤其是做早餐,因为我们……破案了!杜锋怒推工作人员,慢镜头还原真相原来是一场乌龙杜锋怒推工作人员?慢镜头还原真相,原来是一场乌龙。昨天广东队在两连败之后,终于迎来了实力相对较弱的福建队,不过比赛的过程并不容易,半场落后14分的情况下最终靠着三个老将周……酒店可以接亲吗?酒店接亲需要注意哪些事项现在许多新人都会选择在酒店接亲,这样既节省时间,而且酒店的采光又好,可以拍出美照。那么酒店接亲需要注意哪些事项?一、可以在酒店接亲如今异地结婚越来越普遍,从新娘家接……薇娅逃税只是冰山一角?邓超孙俪牵扯2亿大案,冯小刚终大仇得报薇娅被罚13。41亿,邓超、孙俪被约谈,补缴2。5亿,冯小刚终大仇得报。近期薇娅,因偷税漏税被罚13。41亿,网友直呼,通货膨胀怎么没带上我。随即又有网友扒出,邓超孙俪夫……非洲杯赛前爆料突尼斯vs马里,非洲最好防线马里6场预选赛零封非洲杯突尼斯vs马里时间:11221:00北京时间2022年1月12日21点,非洲杯F组的首场比赛率先开打,比赛双方是突尼斯和马里。本场最大看点就是:突尼斯非洲排名……驻美大使秦刚期待据中国驻美国大使馆网站11日消息,美东时间1月10日晚,秦刚大使在美国国家冰球联盟(NHL)总冠军球队华盛顿首都队主场和波士顿棕熊队比赛期间发表视频致辞,介绍北京冬奥会筹备情况……为何这几位如此热门的LOL英雄,却没冠军皮肤?月儿弯弯照九州,有人欢喜有人忧。冠军皮肤就这样,每年能得到冠军选手宠幸的就那56个幸运英雄。没有被选中的英雄。尽管在当届世界赛有登场,胜率也不错,因为冠军选手没有选中或者拳头认……
拿着150万的薪水,干着4000万的活,你才是火箭最值得培养114110,火箭险胜雷霆,喜提4连胜!尽管火箭目前仍然5胜16负西部垫底的战绩,但让人看到了一丝曙光!曙光在哪?首先是塞拉斯的教练的饭碗保住了,其次是火箭找到了赢球之道。哪些……马丁靴失宠了?2022大衣这双鞋正流行,时髦又显高今年。。。哦不对,应该说去年了,确实是靴子大火的一年。(每天都忘记已经2022了)从我关注的时尚博主、到上下班路上会遇见的时髦girl,说人脚一双靴子真不夸张。图源……胃痛饮食伤胃证的舌苔胃痛:又称胃脘痛、心口痛、心胃痛、心腹痛、胃心痛,是以上腹胃脘近心窝处疼痛为主症的病证。饮食伤胃舌中白主症:胃痛吞酸,胀满拒按。上焦胸闷气短舌尖为心肺所属,舌……四面楚歌的德云社,能否冲出重围看着开心麻花和大腕娱乐在央视春晚上陪着全国观众跨年,不知道有没有人注意到没有现身的德云社。央视春晚,一直都被称为语言类节目的试金石。尤其是相声领域,原本央视春晚分配……孙科逝世后,他的老婆儿女,结局如何?1973年9月13日,享年82岁的孙中山先生独子孙科病逝于台北,回顾孙科的一生虽无法与孙中山先生相提并论,但又因受到孙中山先生的影响而自有一番曲折。作为家中独子肩负延续香……如何降低孩子被拐风险?一文详解人贩子骗术及应对措施4月30日最高法最高检公安部联合发布通告敦促拐卖妇女儿童相关犯罪嫌疑人投案自首随后公安部发布A级通缉令公开通缉6名重大拐卖妇女儿童犯罪……116108,塔图姆霍福德双双30带走比赛!字母3418独木今天上午先开始的东部半决赛G4的两绿大战让人热血沸腾。赛前绿军主力中锋罗威因突发膝盖酸痛退出了出场名单,令人担心。两队鏖战4节,最终凯尔特人凭借曼巴门徒塔图姆和老将霍福德第四节……五一黄金周风情苗乡融水各景区景点优惠活动预告来袭小长假快乐假期去旅游这周六就开始进入5天加长版的假期想想都很激动这个五一黄金周为大家准备了许多新活动、新产品、新实惠今天先为小伙……抽烟?爆痘?王源为何成了三小只中发展最差的一位?距离TFboys成员单飞已经过去五年的时间了,这个内娱最早的养成系组合,现如今的成员们都已经脱掉了大半稚气,成为了独当一面的男人,只不过看到他们同台演出的机会越来越少。这……人间清醒杨幂一年拍11部戏,化身新人奶妈,今身家上亿李少红曾评价杨幂:她最大的问题,是因为她很小就在摄制组,对演戏太习以为常了。她自己都下意识地程序化表演,快乐就是哈哈哈,痛苦就是哇哇哇,……大展宏兔逐梦星辰!中国探月航天太空兔命名兔星星我们的太空1月14日,在北京颐堤港的中国探月太空兔展陈活动现场,中国探月航天IP形象太空兔正式对外公布了名称。在过去几年时间里,大家一直亲切地称呼其为太空兔,在农历……保险根本没保障?三家大保险公司都破产了,已经买了的怎么办?很多人买保险是求一个保障,万一遇到意外,还能获得经济补偿。可如今,有3家大保险公司都破产了,人们不禁慌了,难道保险根本没保障?已经买了的该怎么办呢?3大保险公司是如何倒闭……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网