es6遍历对象的所有属性
创建map的时间复杂度?
创建map的时间复杂度?
多重嵌套 for 循环太丑,运行效率又低,有没有什么办法可以降低它的嵌套层数?游戏内怎么简洁优雅的获取我想要的数据,又有良好的智能提示效果? 有没有通用的提高运行效率的方案?没错,ES6 的 Map 就是为你定制的。 先看一个简单的例子,数组去重:
上面用了最基本的2重 for 循环遍历数组达到去重的效果,代码运行效率低,时间复杂度达到了O(n2),如何优化成一重for循环呢?用 Map 试一试! Map 是 ES6 新出的一种数据结构,用来表示键值对,object也是键值对结构,Map算是对object的一种加强,object的键只能为string,Map的键可以为任意值。我们用Map来存储中间遍历的值,从而可以达到一轮for循环就完成去重的目的,如下:
很明显,上面通过 Map 减少了一层for循环,将时间复杂度降到了O(n),提高了运行效率。 Map这种键值对结构(字典,哈希表),可以直接根据键名找到对应的值,不需要遍历,大大提高了查找的效率。我们常用的对象和数组结构也有同样的效果,但是Map功能更强大,配合ts的智能提示效果更好。 理论分析:为什么用 Map 能提高运行效率呢,仔细思考,发现,这个里面蕴含了一个重要的计算机理论知识——空间换时间!计算机理论里面,对于一个算法,他的时间负责度和空间复杂度是对立的。简单的理解就是,占用空间多,运行就快,占用空间少,运行就慢。上面的 Map 就是开辟的额外存储空间,用来保存一些中间状态,从而将2重 for 循环降低为1重 for 循环,降低了运行时间。 Map的强大还体现在他的充足的智能提示的地方:let and声明。
上面通过声明键和值的类型,当调用对应的 API 时候,会对参数和返回类型有一个提示作用,这是对象和数组没有的优势,而且 Map 的 key 也可以为对象等任意类型,这在有些地方也能起到意向不到的方便作用。 所以游戏中,凡是想提高运行效率,想降低查找等时间消耗的地方,都请尽可能的用Map来解决吧,这一定是一个百试不爽的万精油方案,而
web前端的JavaScript需要学什么,按什么流程学习呢?
web前端是一个庞大而复杂的技术体系,其复杂程度其实并不亚于任何一门后端语言。而作为一名前端基础学习者,Javascript的学习至关重要,但只学Javsacript是远远不够的,需要同时学习html,css等很多知识。
单纯针对于学习Javascript这一项新语言来说,肯定离不开该语言的基础知识,要循序渐进式学习。
一、基础知识包括基本语法,语句,数据类型,BOM与DOM,事件处理等。这些都是非常必要的基础,可以从 W3School 网站中进行学习,学习过程中还可以有实际的事例参考,也可以自己边学边练习。
基本语法学习完成后,可以再学习闭包,作用域,原型链,构造函数,Ajax等。因为这些对于初学者不太易懂,可以反复学习,多做练习了解其原理及使用方式,对日后的提高有着很重要的作用。
这里推荐一本书,里面讲得还是非常实用的,学习完这本书,基本上都差不多了。
二、进阶学习Javascript发展迅速,在以上知识学习完成并熟练以后,就可以学习目前前端常用的技术和框架了,比如ES6语法,了解MVVM,学习使用Vue,React等Js库,以及与其相关的生态组件库,如antd,element-ui,iview等(也可以尝试用jquery来做一些东西)。
以及再学习NodeJs以及前端工程化方面的东西,比如npm,webpack等等。
总结web前端的生态非常庞大,学好Javascript是必须的,同时也要学习其相关的知识,初学者可以循序渐进的进行学习。