小鱼

Results 54 issues of 小鱼

依然是旧文,修改一波发出来。明天团队出去春游有可能没时间写: https://fe.ele.me/guan-yu-han-shu-zuo-yong-yu-he-ji-cheng/

突然想起 LeetCode,这是一个我不喜欢的地方,不过既然想去就去刷一刷。刷了几题觉得有时候就是很偏见的的玩意,比如奖字符串中的元音反转,也就是 `hello` 会变成 `holle`,也就玩玩。 准备结束刷新到 https://leetcode.com/problems/flatten-nested-list-iterator/ ,然后默默在编辑器写后运行,跑过自己本地的 Testcase,但是贴上去竟然出错。代码如下: ``` js var NestedIterator = function(nestedList) { this.nestedList = nestedList; }; NestedIterator.prototype.flatten = function(arr, ret) { if(!ret) ret = []; for(var...

> 最近有时差,昨天的任务今天来写 👎 。 昨天写了前天的任务「如何分组」。大家都会需要用到「洗牌」,而关于如何洗有多种算法,其中有一个简洁高效的算法就是 Fisher-Yates Shuffle https://bost.ocks.org/mike/shuffle/ ( 文章和演示都非常棒 )。 在「如何分组」里我写了一个思路,里面有一种重要的点是不断从原来的数组踢除数值,这会导致数组本身重排,而这是 Fisher-Yates 要避免的问题,他采用的是交换的方法来避免重排,如下中文注释。 ``` js function shuffle(array) { var m = array.length, t, i; // While there remain elements...

对于球迷来说 NBA 是一种精神,对于 Benz 粉丝来说 AMG 是一种精神,对于黑客来说无依赖也是一种精神。前段时间因为 leftPad 在 npm unpublish 之后引发了一堆对 leftPad 的讨论,就如坐我旁边的同事,就叫我当场写个 leftPad,然后在内部分享会嘲笑我写的太差。 刚半夜看 GitHub Trending 发现了一个无依赖的对字符串操作的小库 [dleitee/strman](https://github.com/dleitee/strman)。喜欢看薄的书,看简单的代码。所以看了一波: ``` js export const _isArray = value => { return...

几乎每次面试都问一个题:一群人出去玩,写一个程序随机分组可以如何分。最后简化成 10 个人出去玩,如何将人随机分配到 4 个组里,并保证每个组的人比较均匀。 ``` js var arr = [1,2,3,4,5,6,7,8,9,0]; var group = [[],[],[],[]]; (function split(arr, group) { // you code here console.log(group); })(arr, group); ``` 不想直接给答案,有订阅的大家思考一下,有兴趣的可以评论发自己的答案。也是留给老婆的一道题。考点包括随机、数组操作、基本的流程控制。 > 补:昨天又忘记了...

> 今天终于正常了,当日事当日毕。 以前写宣传页面的时候,微信作为一个最大的流量平台,分享的「卡片」当然要做的好看一点,所以写了 [sofish/wechat.js](https://github.com/sofish/wechat.js) 来省时间。后来微信就变得很屎,分享竟然需要签名,而且对每个页面都要。 最近老婆的项目遇到一个情况需要自定义分享到朋友图/朋友的卡片 URL 和图片,所以找了一个实现 https://github.com/leecade/weixin-node ,简单好用(记得建一个 `/tmp/` 文件夹,别问我为什么)。 因为微信规定 ticket 时间是 7200,并且有次数限制,所以需要自己缓存 ticket,而这个库用了一个简单粗暴且有效的方法 —— 存文件。每次需要之后去读文件,判断是否过期,如果过期重新请求,没过期就用缓存。https://github.com/leecade/weixin-node/blob/master/index.js#L79 签名和用法参考:[微信JS-SDK说明文档](https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html)

对于函数体内,`this` 总是指向调用它的上下文,有时候我们希望调用的上下文是某个指定的对象,这里最简单的方法是使用用 `call` 和 `apply`。每次面试,问到它俩有什么区别,这个非常简单的一个点,面试的时候屡试不爽,大部分人都不知道。 在此之前,我们先来看一段代码。 ``` js class Cat { constructor(name) { this.name = name; } meow() { console.log(`meow, i'm ${this.name}`); } } var fakeCat = { name: 'sofish'...

这篇文章写的相当好,对比 `setTimeout` / `setInterval` 和 `requestAnimationFrame` 的处理,讲解用 `requestAnimationFrame` 来做 hack,并讲解如何利用 composite layer 来提高渲染性能:http://www.infoq.com/cn/articles/javascript-high-performance-animation-and-page-rendering

之前教学的时候写的文章,现在老婆还没理解透,所以把旧文整理了一下,发到 [饿了么前端博客](https://fe.ele.me)。如下: https://fe.ele.me/javascript-lei-xing-2/