![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
js
Small Tornado
这个作者很懒,什么都没留下…
展开
-
堆排序以及TopK大顶堆小顶堆求解方式(js版)
我理解的堆排序堆排序是一种选择排序,时间复杂度o(nlogn),空间复杂度o(1)。数据结构底层是数组,通过索引之间的关系可看二叉树,父结点总是大于或者小于孩子结点。这就是堆的结构。刚初始完的堆是占据整个数组的。开始排序后,数组分为两个部分!前面是堆,后面是已排序完的有序子数组。排序时,堆顶元素和堆尾元素会交换,有序子数组长度+1,堆长度-1;此时,原堆尾元素占据了堆顶,可能会破坏了堆结构,所以,需要堆化,也就是堆顶元素要保持最大或者最小。当堆只有一个元素,自动加入有序子数组;这时有序子数组占原创 2021-02-28 00:28:35 · 681 阅读 · 0 评论 -
node实现国际化翻译以及文件读写
前几天有项任务是让我在几千个文件中,对指定内容进行繁体翻译。大概估算了一下有4700多处需要进行繁体翻译,如果只靠去google翻译复制粘贴也需要2天多的时间,而且会非常无聊!!所以,在这里利用了nodejs的文件读写以及google翻译的api帮助我来做这繁琐的事情其中,编程用到的工具有:1.typescript (npm安装即可)2.lodash(npm安装即可)3.fsPromise(用异步读取文件的目的只是想用用async)4.google-translate-api(npm 安装即可原创 2021-02-21 12:38:49 · 780 阅读 · 0 评论 -
排序:js实现快速排序
实现快速排序// 1 2 9 3 4 -1 8 -2const arr = [1, 2, 9, 3, 4, -1, 8, -2];let p = +new Date() % arr.length;console.log(quickSort(arr, 0, arr.length - 1));function partition(arr, left, right) { let i = left; let j = right; const x = arr[i]; wh原创 2021-01-27 22:35:34 · 123 阅读 · 0 评论 -
js实现任务(promise任务)队列
任务队列队列的特点就是先进先出先开始的任务执行完后,才能开始执行后续任务另外任务队列中有任务时是自动执行的。另外提一点,实现稍微复杂一点功能,全都是闭包!!设计:new一个队列,返回值是一个function,这个function的入参为为task(类型promise),返回值也是promise const queue = new Queue(); queue(task1).then(data=>console.log(data)); queue(task2).then(data=>原创 2021-01-23 18:40:57 · 4086 阅读 · 2 评论 -
js 实现new操作符以及继承
js 实现new操作符new 干了啥?来自MDN:new 关键字会进行如下的操作:创建一个空的简单JavaScript对象(即{});链接该对象(设置该对象的constructor)到另一个对象 ;将步骤1新创建的对象作为this的上下文 ;如果该函数没有返回对象,则返回this。function CustomNew(fn) { const obj = {}; //1 obj.__proto__ = fn.prototype;//2 const result =原创 2021-01-21 00:39:22 · 153 阅读 · 0 评论 -
js实现链表翻转以及检查是否有环
翻转一个链表input a->b->c->doutput d->c->b->a// 链表翻转const reverseList = function(head) { let prev = null; let curr = head; while (curr) { [ curr.next, prev, curr ] = [ prev, curr, curr.next ]; } return prev;};let a = {value:'a',nex原创 2021-01-20 00:09:12 · 230 阅读 · 1 评论 -
大致实现Promise
今天俺尝试一下实现Promise1.下面代码实现不了micro task,所以resolve后,then中回调的函数是立即执行的。2.then方法是加入成功、失败回调函数的入口,以及获取成功value,失败reason的地方//实现promise,有回调的地方需要保存this为ctx;不然this指向会有问题//另外,写代码时候想用闭包来代替this,最终失败了。还是换回了ctxfunction CustomPromise(execute) { this.status = 'pendi.原创 2021-01-18 13:35:39 · 76 阅读 · 0 评论 -
节流和防抖的实现
节流和防抖特点1.节流的特点:指定的delay时间段中,无论调用多少次方法,只触发一次。2.防抖的特点:调用方法后,在delay时间过后,才会触发方法,如果delay内又调用方法,则重新计时。3,实现方式:两者的实现方式都是利用闭包,闭包就是,函数 + 函数可访问的局部变量[^1](该变量可以一直保存在内存中)4.另外俺个人觉得它俩的简单实现版还有一个特点,一个掐头儿 一个去尾儿。防抖的第一次调用不立即执行;节流的最后一次调用可能不会执行简单实现节流简单版// 节流的简单实现functio原创 2021-01-16 12:38:14 · 269 阅读 · 0 评论 -
ES6 String.raw会对以转义过的字符串进行再次转移
ES6 String.raw会对以转义过的字符串进行再次转移String.rawString.raw是ES6提供用于处理模板字符串的方法,它可以转义’'反斜杠。相当于在反斜杠前再加上一个反斜杠,用于转义自己。有部分博客以及视频中,有说“如果原字符串的斜杠已经转义,那么 String.raw 不会做任何处理。”这句话应该是不对的。后来我在阮一峰老师的es6入门博客中看到这句话:“如果原字符串的斜杠已经转义,那么String.raw()会进行再次转义。”并在浏览器下实验:String.rawHi\原创 2021-01-11 22:09:13 · 419 阅读 · 1 评论