怀英漫谈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 条评论
登录 后参与评论

相关文章

来自专栏我是攻城师

Java时间处理神器之Joda-Time

3645
来自专栏程序猿DD

优雅处理你的Java异常

来源:https://my.oschina.net/c5ms/blog/1827907

1122
来自专栏余林丰

外观模式

 外观模式又称为门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。我们还是用通俗的语言来解释这句话...

1658
来自专栏我就是马云飞

设计模式二十四章经之策略模式

1092
来自专栏怀英的自我修炼

Java漫谈8

今天我们来聊聊字符串。 字符串,在Java中一个最接近与8大数据类型的存在。甚至于由于它太好用了,以至于在编写代码的时候都快忘了有个叫char的基本数据类型了。...

33410
来自专栏java技术学习之道

面试必看!2018年4月份阿里最新的java程序员面试题目

2574
来自专栏lgp20151222

Java的常量接口思考,项目中的常量是放在接口里还是放在类里呢?

最近在看一本书 Java与模式,里面提了一句不建议使用常量接口,甚至举了个java源码的反例,

751
来自专栏积累沉淀

Java设计模式(九)----外观模式

外观模式 一、定义 二、结构 三、案例 四、特点 一、定义 Facade...

1747
来自专栏大史住在大前端

javascript基础修炼(2)——What's this(上)

this是javascript关键字之一,是javascript能够实现面向对象编程的核心概念。用得好能让代码优雅高端,风骚飘逸,用不好也绝对是坑人坑己利器。我...

611
来自专栏牛客网

金山WPS,C++研发工程师,一面

【每日一语】人们常常会欺骗你,是为了让你明白,有时候,你唯一应该相信的人就是你自己。——《千与千寻》

682

扫码关注云+社区