专栏首页怀英的自我修炼怀英漫谈4-JS中的Map

怀英漫谈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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 怀英漫谈1-JS初体验

    你好,欢迎来到怀英漫谈,这次想与你聊聊初学JS的感受。 这次接触JS的时候并不是零基础,是没有系统性的对JS的认知,正好这次也借此机会,用碎片的时间将JS的知识...

    用户1335799
  • 一般计算机工程师能实现的愿景

    用户1335799
  • 看完《机器智能是生产力,区块链是生产关系》的一些感受

    这两天听完了吴军老师的226封来信《机器智能是生产力,区块链是生产关系》,有启发,所以说一下我的感受。 首先,不得不说,这样的类比是我第一次见到。放在之前,我...

    用户1335799
  • 【专业技术第一讲】进程的一生

    学习编程,进程跳不过去,好多初学者可以向背教科书一样说出进程和线程的区别,但是很少能真正的理解进程整个运行过程。搞清楚进程的运行机制,进程运行的各个阶段也并不是...

    程序员互动联盟
  • Vue实例

    Vue 实例还暴露了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来

    py3study
  • Emoji絵文字/えもじ -- 多终端适配!

    腾讯ISUX
  • linux网络编程之进程间通信基础(一):进程间通信概述

    一、顺序程序与并发程序特征 顺序程序特征 顺序性 封闭性:(运行环境的封闭性) 确定性 可再现性 并发程序特征 共享性 并发性 随机性 二、进程互斥 ...

    s1mba
  • GitHub 上有哪些项目能帮你更好的学习编程?

    GitHub 官方团队之前列过一个项目集合清单,总结了 11 个能帮普通用户学好编程的项目。

    GitHubDaily
  • ps 命令详解

    java404
  • ICCV 2019 | 变形曲面如何跟踪?亮风台公布最新算法

    ICCV 由IEEE 主办,每两年召开一次,与计算机视觉模式识别会议(CVPR)和欧洲计算机视觉会议(ECCV)并称计算机视觉方向的三大顶级会议。据了解,今年一...

    AI科技评论

扫码关注云+社区

领取腾讯云代金券