
JavaScript
文章平均质量分 64
青灯夜游/
An inch of gold will not buy an inch of time.
展开
-
近期一次前端笔试,两题
题目描述: 每天皇帝每天都需要听大臣们讲述某些国家大事的情况,由于每个大臣所讲的事的重要性都不一样,每天皇帝都忙得焦头烂额,效率还特别低,所以皇帝决定,将这些大臣讲述事情的顺序做出一定调整,已知,每天有m个大臣要觐见,每个大臣都要禀报n件事,而皇帝根据每个人的事务的重要请你给他们排序,重要性总和越大的越排在前面禀报,现给出一个m x n 的数据,其中(mi , nj)表示第i个大臣要禀报的第j件事的重要性,如果重要性之和相同则按照先后顺序排列,然后,有个第id个大臣来问问你,他排在第几位?...原创 2022-08-29 00:09:00 · 313 阅读 · 1 评论 -
Vue组件间通信方式(总结)
通过props传递通过$emit触发自定义事件emit触发自定义事件,使用refEventBusemit触发自定义事件,$parent 或 $rootattrs 与 listenerslisteners接收除去带有.native事件修饰符的所有事件监听器,作用和provide 与 inject注意这里是祖先传后代,意思是不管哪一代都能拿到祖先的数据Vuex。......原创 2022-08-18 16:37:59 · 535 阅读 · 0 评论 -
近期一次前端笔试算法复盘,一题
变种题,其实就是多了个后序遍历过程,具体的构建二叉树的思想就是,根据每种遍历的特点,得出相应节点的位置,其中,前序遍历特点是,中左右、中序遍历是,左中右、后序遍历是,左右中;那么就可以根据前序遍历或者后序遍历,得出父节点(shift或者pop出父节点),然后根据中序遍历分割左右子树,然后根据分割出的子树再次重复分割,直到得到对应的叶子节点,整个二叉树就重构出来了,最后进行一次后序遍历得出结果即可。解题思路,根据前序、中序遍历,构建出源二叉树,再进行后续遍历,求出后序遍历,可以理解为leedcode中的。..原创 2022-08-15 10:33:27 · 299 阅读 · 0 评论 -
手写Promise总结(源码+类方法封装+关键性问题列举)
前言:前面几篇文章我们对Promise进行了一个手写的封装,也提及到了一些有关方法的关键问题和执行机制,以及Promise的执行机制,也分别从异步和同步方向进行了考量。下面我就列举出有关Promise以及Promise相关方法的一些关键性问题,之后会给出完整的手写Promise源码,以及类封装的源码。关键性问题:1. 串联多个任务简单来讲就是 通过 then方法来链式调用多个任务(异步) 值得注意的是 then 方法链式调用的时候 需要等上一个then方法结束返回了之后才会调用下一个2. 改原创 2022-01-11 10:58:42 · 195 阅读 · 0 评论 -
手写Promise(原生Promise剖析五 - - resolve,reject等方法封装)
前言:在此之前,我们以及陆续封装好了Promise、then、all,这些方法,并且以及讲解了其中的机制,和封装的过程,现在,我们就把剩下的较为简单的方法过一遍。1. race()这个方法类似于all方法,传入的参数也是一个有Promise组成的数组,但是它的结果分析起来就相对简单很多,不用过多的考虑,其返回的值也是一个Promise对象,既然返回的是一个Promise对象,那么就存在链式调用,那么就需要进行二次封装,内部就需要调用then方法,它的结果机制是这样的:返回的是一个Promise对象,原创 2022-01-09 11:36:56 · 1075 阅读 · 0 评论 -
手写Promise(原生Promise剖析四 - - catch方法封装 - -(异常穿透))
首先,对于这个catch方法来说,是很简单的,因为它只帮我们做了一件事,那就是调用失败的回调,如下: let p1 = new Promise((resolve, reject) => { reject("Oh no") }) p1.then(value => { console.log("ok") }).then(value => { consol原创 2022-01-07 22:50:49 · 1041 阅读 · 1 评论 -
手写Promise(原生Promise剖析三 - - all方法封装)
前言:上篇文章中,我们以及构建出了基本的then()方法,并且处理掉了一些关键性问题,如链式调用怎么二次封装,链式调用then()方法返回值如何,并且完整的列举出了三种情况,分别是:非Promise,Promise(成功Promise、失败Promise)、抛出异常 , 时的返回值情况。最后我们留下了一个问题,就是有关这次文章的主题,那就是all()方法中,一次传入多个Promise组成的数组,最终结果如何,我们又该如何完美的封装它?首先,我们就需要了解官方的Promise.all()方法是怎么运作的,原创 2022-01-06 22:11:41 · 1306 阅读 · 0 评论 -
手写Promise(原生Promise剖析二--then方法的封装)
前言:在上一篇文章中我们已经基本了解到Promise是什么以及Promise能干什么。并且我们已经基本构建出了一个Promise对象的基本结构。现在我们需要知道什么是then()方法,并且then()方法有什么作用,有一定Promise基础的人一定知道,then()方法是在创建Promise对象之后,可以通过Promise实力对象调用的一个处理回调的函数,其中,包含成功的回调(value => {}),失败的回调(reason =>{})。同上一篇文章中讲到的状态改变,调用的回调函数是同一个原创 2022-01-04 10:32:39 · 630 阅读 · 0 评论 -
手写Promise(原生Promise剖析一)
在手写Promise之前,我们需要了解一下什么是Promise,为什么要引入Promise。1.Promise是ES6引入的一种解决异步编程的方案。2.为什么要引入Promise呢?可以从问题的根源出手,在我们写一些嵌套的回调函数时会发现,最基本的问题就是回调地狱的产生,同时伴随着当我们不去手动处理回调结果和异常时,我们就很头疼,没办法直接捕获到结果和异常,这时候,Promise就诞生了,他就相当于一个助手,当你将你所需要的回调让他去处理时,他会根据你说提供的回调返回给你一个“正确”、“错误”或者“原创 2021-12-30 23:47:02 · 868 阅读 · 0 评论 -
leedcode 删除有序数组中的重复项 (JavaScript)
题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。思路:首先,我们要理解一下什么是双指针,就是字面意思,两个指针啦,原创 2021-11-22 23:17:15 · 119 阅读 · 0 评论 -
leedcode 合并两个有序链表 (JavaScript)
题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]思路:这道题的思路很简单,就和合并数组很像,但是这里是链表,而单向链表只认next操作这个规则想必也不用多说,这里我们先创建一个空链表用来保存新产生的链表,随后创建一个dummy指向这个新链表,当 l1 以及 l2 都不为空时...原创 2021-11-19 09:24:35 · 601 阅读 · 0 评论 -
leedcode 有效的括号 (JavaScript)
题目:给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true思路:这道题又要用到我们一个老朋友,哈希表,没错,这道题分析起来很简单,只要注意一个点,就是堆栈思想,这道题主要考察的是我们的堆栈思想,也就是 “先进后出,后进先出” 。第一步: 我们创建一个 map() 并初始...原创 2021-11-17 00:29:24 · 110 阅读 · 0 评论 -
leedcode 回文数 (JavaScript)
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x = 121输出:true思路:这道题相对而言比较简单,重点是我们可以通过这道题来了解解这种有关 “回文” 题惯用的思路是什么,那就是,从循环遍历的过程中向两边遍历,或者直接从两边开始向内遍历,这道题就是要...原创 2021-11-15 00:00:26 · 1010 阅读 · 0 评论 -
leedcode 删除链表的倒数第N个节点 (JavaScript)
题目:给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。示例 1:输入: head = [1,2,3,4,5], n = 2输出: [1,2,3,5]思路:这道题的解题思路挺巧妙的,首先要清除的是删除链表节点需要做的不只是简单的删除其中一个数字这么简单,而且也没有这种方式去删除 ,方法就是数据结构中的,指针指向改变,通过将倒数第n+1个节点的的指针指向改成指向倒数第 n - 1 个节点即可,而这道题的关键在于,不清楚链表长度,以及删除的是倒数第n个节点。分..原创 2021-11-14 00:33:44 · 1424 阅读 · 0 评论