如何编写一个 webpack plugin

本篇文章源自我自己的一个需求:我想看看 webpack 是如何组织 js 代码模块化的。打开编译后的文件有很多注释,不方便查看,我想去掉这些这些注释,那应该怎么做呢?学习写个插件用正则替换这些注释代码。

插件的设计机制一般都是在程序运行的各个阶段提供不同的 hook,传入数据、修改数据,以期得到一个满意的结果,webpack 也不例外。那针对这种场景,应该使用说明钩子函数呢?

继续阅读“如何编写一个 webpack plugin”

动态规划(Dynamic programming)— JavaScript 描述

《数据结构与算法 JavaScript 描述》这本书错误好多,为什么译者不把这些错误纠正呢?

在工作中,我们都用过递归,用俗话说就是函数自己调用自己;而动态规划一般被认为是和递归相反的一种解决问题的思路:递归是从解决一个大问题开始,通过逐步解决一些小问题,来使最终的问题得到解决;动态规划的思路则恰恰相反。

继续阅读“动态规划(Dynamic programming)— JavaScript 描述”

工作和生活的情绪应该分开

2020-04-30

2020-04-29

2020-04-28

有一个二维数组如下: let arr = [[“a0”, “a1”], [“a1”, “a2”], [“a3”]]; 我们看到 a1 这个元素在数组的第 0 项和第 1 项都存在了,我们需要将其合并成一项:

// 需要转化成 [[“a0”, “a1”, “a2”], [“a3”]]

同理,针对一个任意项的二维数组,只要其中某单个元素重复了,就应该合并进同一个数组里,减少这个二维数组的个数。那么怎么实现这个呢?

标题:工作中的一个问题之二

内容来自曾小乱的blog:https://zengxiaoluan.com/question-in-working/

继续阅读“工作和生活的情绪应该分开”

工作中的一个问题之二

有一个二维数组如下:

let arr = [["a0", "a1"], ["a1", "a2"], ["a3"]];

我们看到 a1 这个元素在数组的第 0 项和第 1 项都存在了,我们需要将其合并成一项:

// 需要转化成 [["a0", "a1", "a2"], ["a3"]]

同理,针对一个任意项的二维数组,只要其中某单个元素重复了,就应该合并进同一个数组里,减少这个二维数组的个数。那么怎么实现这个呢?

继续阅读“工作中的一个问题之二”

工作中的一个小问题

有一个字符串: a[0:3]bb[-1:9]c[-1:-9]d ,0 对应 a0bb-1c-1d,1 对应 a0bb-1c-2d,2 对应 a0bb-1c-3d,以此类推,那么当 100 应该对应哪个字符串?怎么实现这个转化?

需要注意 2 个地方,一个是 [-10:3] 可以递增,也可以是递减 [3:-10];另一个是这种模式可以无限叠加。

继续阅读“工作中的一个小问题”

三月份的工作紧张

2020-03-31

应该正确使用 label 标签了,虽然我以前用了很长时间理解它。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label

2020-03-30

学习英语是理解编程的第一步,generator 有发电机的意思,而 yield 有产生的意思,两者结合可以源源不断产生电源,很符合生成器函数的特性。 而利用 generator 处理异步也可以这样写:

标题:generator 和异步回调

内容来自曾小乱的blog:https://zengxiaoluan.com/generator-and-asynchronous-callbacks/#2020-03-30%E6%9B%B4%E6%96%B0

继续阅读“三月份的工作紧张”

partial application

这个概念好像不太好翻译,有人直译为偏应用,对不懂这个概念的人有点一头雾水,不知所云,我来简单理解一下。另外已经有工程师把这个特性提交到了 tc39,说不定不久我们就能在新版谷歌浏览器使用了。

我们有一个求和函数如下:

function foo(a, b, c) { return a + b + c }

当我调用的时候,有个参数我突然不知道传什么,暂时想不传,并用 undefined 来替代。我们当然不能这么写:

foo(undefined,1,2)
继续阅读“partial application”

generator 和异步回调

在我们日常的前端开发中,异步回调是不可避免的操作,会严重影响我们的编程体验和代码的维护性、阅读性,而 promise 和 generator 可以在一定程度上解决这个问题。它们没有那么神奇,只是代码上的一些小花招,现在我们具体来看看 generator 是如何解决异步回调的问题。

继续阅读“generator 和异步回调”

并查集的正确使用姿势

因为工作的关系,不得不学习了几种算法,好久不用又忘记了,这是一篇复习文章。

并查集回答的是连接问题,比如说从 a 城到 b 城有没有路,能回答有或者没有,但是不能回答具体的路是那几条,该怎么走;再比如说 a、z 这 2 个人能否通过共同好友的名片分享来加上微信。

并查集是解决点与点之间的关系,遇到实际问题的时候,需要我们进行转换成点与点,也就是建模。在数据结构上一般用数组来存储这些点。

继续阅读“并查集的正确使用姿势”