怀英漫谈4-JS中的Map

昨天是2017年工作的最后一天,伴随着昨天的结束,2017年的工作告一段落。

昨天和前天,在工作中,将一个双重循环的寻找逻辑,改为饿了用对象模拟的Map逻辑,使得效率一下子就提高了很多。今天就想和你聊聊这个类似Map的逻辑。

一开始并没有搜到JS中Map的用法,所以才采用了双重循环的逻辑。11月份在刚开始做这个功能的时候,是有在网上查过JS中的Map用法的,网上的大多解决方案是用循环去模拟Map。理由是JS中并没有Map这个数据结构。后来去W3C上查,也确实没有,外加之当时对JS对象的理解并不深,所以最终用双重循环先实现了功能。

不过在搜寻的过程中产生了一个疑惑。如果Map这种数据结构在Java中能得到广泛地运用,那就说明它是有相当使用场景的,既然如此,那么JS中为什么就没有Map这种数据结构呢?这不合理的,一个在另外一门语言中被证明有效的数据结构,在另一门集大成的语言中不应该没有一席之地的。

项目在继续,悬念就一直搁置着。直到最近,在查询对象的另一个功能时,偶然间碰见了对象属性的另一种调用方式,我突然觉得,对这个疑问似乎有了答案。

正常情况下,传承于Java流的调用风格,切换到JS中的时候,第一想法就是用点号“.”得到相应的属性,并且这是有效的。但如果JS中对象的属性名是数字的话,那么用“.”就不适用了。比如Map是这样的:column={1:"硅谷来信", 2:"前哨", 3:"大局观", …}。那这个时候该怎么调用呢。用“[]”,如果我想得到硅谷来信,我就这么写:column[1]。

这种写法是我在查找如何遍历JS对象的属性值的时候偶然间发现的。这种做法将Map的数据结构和对象从相互独立的关系变为了从属关系,Map是对象的子集,是它的一种表现方式。简单点儿说就是,Map即对象,对象即Map。

如此一来,也解除了另外两个现象。一,Java后台返回的Map,自动被解析为了JS中的对象。二,JS中的对象可以临时增添值,而对象的内存地址值不变。根据现象二,可以形成比如一个推论,在第三方控件的内部对象中可以临时增加属性值,便于对第三方控件做拓展,实现自己的功能。

比如在使用EChart的日历饼图的时候,可以在构造对象的时候,加入事件id,在点击具体的某一块的饼的时候,可以得到这块饼的对应的事件了。

今天和你聊了聊我对JS中对象的,一个新角度的理解,希望能对你有所帮助。

清 单

  1. 在JS中,Map即对象,对象即Map。
  2. 如果有发现了一个不合理的现象,又直接的简洁而优雅的答案,记住它,然后该干嘛干嘛,说不定在不久的将来,答案就自动出现了。

原文发布于微信公众号 - 怀英的自我修炼(hydzwxl)

原文发表时间:2018-02-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏喔家ArchiSelf

一个函数的自白

我是——编程世界的函数,不是数学中的幂,指,对和三角函数等等,但是和f(x)又有着千丝万缕的关系。

785
来自专栏我是攻城师

浅谈Lucene中的DocValues

2683
来自专栏james大数据架构

你真的会玩SQL吗?实用函数方法汇总

你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接、外连接 你真的会玩SQL吗?三范式、数据完整性 你真...

1869
来自专栏养码场

若你想入职面试阿里系公司,不妨看看这位资深Java的面试经

上上周分享了占小狼面试阿里系的面经文章:《一位资深Java的阿里系公司实战面试经验,套路还是面试官的多》 ,蛮受大家欢迎的。看到大家在社群里的好评与点赞,占小狼...

812
来自专栏人工智能LeadAI

python中的时间处理大总结

python中处理时间的模块有三个,datetime, time,calendar,融汇贯通三个模块,才能随心所欲地用python处理时间。本文就是为此而写,文...

3495
来自专栏专注 Java 基础分享

计算机编码基础

     乱码是我们在日常的工作中经常遇到的问题,你可能从网上好不容易下载了一个炫酷的jQuery插件,但是却在打开的时候,发现某几个js文件都是类似“澶у0?...

1719
来自专栏深度学习计算机视觉

白盒测试中的几种覆盖方法

文章转自:http://www.51testing.com/html/44/n-3713444.html 白盒测试用例设计的一个很重要的评估标准就是对代码的覆...

3636
来自专栏生信宝典

Python学习 - 可视化变量赋值、循环、程序运行过程

Python Tutor (http://www.pythontutor.com/)是`Philip Guo`开发的,通过把计算机运行程序代码的过程可视化的展示...

1848
来自专栏CSDN技术头条

MySQL查询优化之道

查询优化器的任务是发现执行 SQL 查询的最佳方案。大多数查询优化器,要么基于规则、要么基于成本。

854
来自专栏HappenLee的技术杂谈

C++雾中风景2:struct还是class?

在C++语言作为C语言的一个超集,但是并不兼容C语言的所有语法规则的。C语言是我学习的第一门编程语言,相对于对其中的语法规则比较熟悉,C语言之中可以使用stru...

632

扫描关注云+社区