这里记录工作中遇到的技术点,以及自己对生活的一些思考,周三或周五发布。

封面图

第六十二期:算法在前端的应用_查找算法

算法在前端的应用

近期一直在做大数据相关的前端开发,所以项目里涉及到表格,图表的内容会多一点。之前也做过数据大屏,车联网项目的前端开发,其实我一直有一个疑问:

很多时候我们回盲目的去看一些算法,最常见的比如:排序算法和查找算法,排序算法常见的快速排序,冒泡排序以,插入排序,归并排序以及选择排序。查找算法诸如顺序查找以及二分查找。

学习这些内容的一个很重要的动机是有时候面试会问到。所以我们每次面试之前会看这些个算法相关的内容,但是其实大部分时候面试问的内容并不深刻,而且在大部分前端开发工作中真正用到这些算法的场景也不多。所以我们对这些内容是看了就忘,下次还得再看,形成了一个恶性循环。

想要真正理算法,我们需要理解算法是什么,它可以解决哪些问题。

前端开发中,我们知道的最常见的场景表格排序和查找。表格排序我们一般用sort方法。而查找我们一般会遍历某个数组或对象,然后判断元素是否等于某个值,这种查找的方法其实属于顺序查找。

当然上面两个场景是比较常见的基础的场景。还有一些比较复杂的场景,比如:vue和react的diff算法。diff算法的核心在于比较两个元素是否一样,而比较两个元素首先需要先找到这两个元素,所以归结起来还是需要一个查找算法。

另外一个场景是插件。比如语法高亮插件,我们且不论是什么语言的语法高亮。语法高亮, 自动补全和拼写检查等必然离不开经典的词法语法分析算法与对应的数据结构,想要讲符合某些规则的代码进行着色高亮,必然还是需要查找算法。

前端开发中算法依赖性比较强的一个很重要的场景就是可视化。对于我们日常开发的应用来说,用一些开源的框架即可完成,但是这些基础的开源的可视化组件库才真正的是强依赖于数据结构和算法。因为它们有可能是树,有可能是图,并且需要高亮等其他效果。这就需要用一些性能较好的算法来实现这些基本的功能。

还有一些场景是底层的一些东西。比如数组的sort方法,我们知道调用reverse或者sort方法就可以对数组进行排序,但是这两个方法底层是怎么实现的呢?又比如我们知道json.stringify可以讲json对象转为json字符串,但是我们未必知道它底层的结构化数据算法到底是怎么实现的。

关于算法在前端开发中的应用,我暂时能想到的大概也就这么多吧,总归还是需要根据具体问题具体分析,因为有时候一个算法其实还是将基础的算法组合起来去解决一个具体的问题。这种模式我感觉有些类似于算法工程师的算子,或者叫模型。

它不是一个具体的方法,而是一个完整的流程。

最后

  • 公众号《JavaScript高级程序设计》
  • 公众号内回复”vue-router“ 或 ”router“即可收到 VueRouter源码分析的文档。
  • 回复”vuex“ 或 ”Vuex“即可收到 Vuex 源码分析的文档。

感谢您的点赞,转发,关注。