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

相关文章

来自专栏程序人生

谈谈面向对象编程

最近写了些和函数式编程的文章,有读者和我讨论函数式编程和面向对象编程的优劣。二者都是很好的编程思想,都在着力解决代码重用的问题,也彼此吸收对方的优点,所以大可不...

41811
来自专栏iKcamp

翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 7 章: 闭包 vs 对象

原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 第 7 章: 闭包 vs 对象 ...

2137
来自专栏GopherCoder

『Go 语言学习专栏』-- 第二期

1255
来自专栏互联网技术栈

设计模式- 合成/组合原则

上面的问题都来源于对方法的改写动作。如果你在扩展一个类的时候,仅仅是增加新的方法,而不改写已有的方法,你可能会认为这样做是安全的,但是也并不是完全没有风险。

904
来自专栏鹅厂优文

Python 工匠:善用变量来改善代码质量

我一直觉得编程某种意义上是一门『手艺』,因为优雅而高效的代码,就如同完美的手工艺品一样让人赏心悦目。

94010
来自专栏web编程技术分享

js常用方法和一些封装(1)1.字符串相关2.数组相关

3669
来自专栏灯塔大数据

干货 | 国外大神总结的10个Java编程技巧!

“任何可能出错的事情,最后都会出错。”这就是人们为什么喜欢进行“防错性程序设计”的原因。

1081
来自专栏AzMark

Python字典的介绍

1172
来自专栏从流域到海域

《笨办法学Python》 第35课手记

《笨办法学Python》 第35课手记 本节课讲函数和分支的,实际上是一次综合练习,代码有点长,请先纠正代码中的错误使脚本能够运行。 原代码中使用三个空格来进行...

20110
来自专栏python3

python--初始面向对象:类的相关知识,对象的相关知识

当然很简单,两个角色,1个人物,1个boss,且人物和boss都有不同的技能,比如人物用觉醒技能秒了boss,掉了xx装备,boss用大招秒了人物,人物死亡,怎...

782

扫码关注云+社区