自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(260)
  • 收藏
  • 关注

原创 转化为布尔值的规则

对于基本类型的数据:null和undefined直接转化为false字符串:空字符串转化为false,其他全为true数字:0和NaN转化为false,其他全为true对于引用类型数据:全为true所以 [] == ![]的结果是true分析:== 中,左右两边都需要转换为数字然后进行比较。[]转换为数字为0。![] 首先是转换为布尔值,由于[]作为一个引用类型转换为布尔值为true,因此![]为false,进而在转换成数字,变为0。0 == 0 , 结果为true...

2021-04-17 12:33:24 1171

原创 [数据结构与算法]给出页面高度,一行展示多张图片,并且图片高度对齐 JavaScript

给出页面高度,一行展示多张图片,并且图片高度对齐function alignImages(imgs, width){...} alignImages([[1, 1], [1, 1]], 3) // [[1.5, 1.5], [1.5, 1.5]]alignImages([[2, 4], [2, 2], [2, 4]], 4) // [[1, 2], [2, 2], [1, 2]] 字符图实例:a表示[2, 4](宽为2,高为

2020-10-22 22:40:42 382

原创 [JavaScript]Array的map方法会不会改变数组

结论:1.数组是值类型的,则不会改变原数组,2.数组是引用类型的数组,如果改变数组选项中的引用类型的值则原数组会发生改变。

2020-10-22 22:28:59 1044

原创 [Vue]vue核心面试题:组件中的data为什么是一个函数

1.vue中组件是用来复用的,为了防止data复用,将其定义为函数。2.vue组件中的data数据都应该是相互隔离,互不影响的,组件每复用一次,data数据就应该被复制一次,之后,当某一处复用的地方组件内data数据被改变时,其他复用地方组件的data数据不受影响,就需要通过data函数返回一个对象作为组件的状态。3.当我们将组件中的data写成一个函数,数据以函数返回值形式定义,这样每复用一次组件,就会返回一份新的data,拥有自己的作用域,类似于给每个组件实例创建一个私有的数据空间,让各个组件实例维

2020-10-14 16:30:48 592

转载 前端性能优化:细说浏览器渲染的重排与重绘

https://juejin.im/post/6844903641816514573

2020-10-11 21:48:35 139

转载 [CSS]css3的translate会引起重排吗?

不会,因为 GPU 进程会为其开启一个新的复合图层,不会影响默认复合图层(就是普通文档流),所以并不会影响周边的 DOM 结构,而属性的改变也会交给 GPU 处理,不会进行重排。使 GPU 进程开启一个新的复合图层的方式还有 3D 动画,过渡动画,以及 opacity 属性,还有一些标签,这些都可以创建新的复合图层。这些方式叫做硬件加速方式。你可以想象成新的复合图层和默认复合图层是两幅画,相互独立,不会彼此影响。降低重排的方式:要么减少次数,要么降低影响范围,创建新的复合图层就是第二种优化方式。绝对布局虽然

2020-10-11 21:45:12 1775

原创 [数据结构与算法]最长回文子串(动态规划)

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-substring题解:/** * @param {string} s * @return {string} */

2020-10-11 19:00:24 152

原创 [数据结构与算法]两个链表的第一个公共节点

输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) function FindFirstCommonNode(pHead1, pHead2) { let p1 = pHead1 let p2 = pHead2 while (p1 != p2) { // 两个指针都走完两条链表公共节点前的部分

2020-10-07 20:25:19 88

原创 [数据结构与算法]子集(回溯) JavaScript

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets题解: var subsets = function (nums) {

2020-10-07 18:12:45 217

原创 [数据结构与算法]全排列 (回溯)JavaScript

给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations题解: /** * @param {number[]} nums * @return {number[][]}

2020-10-07 17:13:10 186

原创 [数据结构与算法]买卖股票的最佳时机 II (贪心) JavaScript

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票

2020-10-07 16:37:12 130

原创 [数据结构与算法]分发饼干 (贪心) JavaScript

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个胃口值 gi ,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j ,都有一个尺寸 sj 。如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。注意:你可以假设胃口值为正。一个小朋友最多只能拥有一块饼干。示例 1:输入: [1,2,3], [1,1]输出: 1解释: 你有三

2020-10-07 16:22:58 172

原创 [算法与数据结构] 打家劫舍 (动态规划) JavaScript

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。示例 2:输入:[2

2020-10-07 15:25:03 120

原创 [数据结构与算法]爬楼梯 (动态规划) JavaScript

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶来源:力扣(LeetCode)链接:https://leetcode-c

2020-10-07 14:35:56 414

原创 [数据结构与算法]对称二叉树 (分治) JavaScript

对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/symmetric-tree题解:/**

2020-10-07 12:46:49 120

原创 [数据结构与算法]相同的树 (分治法) JavaScript

相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 / \ 2

2020-10-07 12:28:21 143

原创 [数据结构与算法]合并K个升序链表 (利用堆) JavaScript

给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输

2020-10-05 23:41:35 207

原创 [数据结构与算法]前k个高频元素(用堆优化) JavaScript

题目:前k个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序

2020-10-05 22:19:36 243

原创 [数据结构与算法]数组中的第k个最大元素(堆)

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element-i

2020-10-05 22:02:27 187

原创 [数据结构]用JavaScript实现一个堆类

前言:在js中是没有堆这个数据结构的,但我们可以用类和Array模拟一个堆实现步骤:· 在类里,声明一个数组,用来装元素。· 主要方法:插入、删除堆顶、获取堆顶、获取堆大小。CODE:(以最小堆为例) class MinHeap { constructor() { this.heap = [] } swap(i1, i2) { [this.heap[i1], this.heap[i2]] = [this.heap[i2],

2020-10-05 21:29:39 371

原创 [数据结构与算法]克隆图

/** * // Definition for a Node. * function Node(val, neighbors) { * this.val = val === undefined ? 0 : val; * this.neighbors = neighbors === undefined ? [] : neighbors; * }; */ /** * @param {Node} node ...

2020-10-05 15:27:02 99

原创 [数据结构与算法]太平洋大西洋水流问题(图)

给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。提示:输出坐标的顺序不重要m 和 n 都小于150示例:给定下面的 5x5 矩阵:返回:[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4,

2020-10-05 00:11:10 539

原创 [数据结构与算法]遍历JSON的所有节点值

const JSON = { a: { b: { c: 1 } }, d: [1, 2], } const dfs = (n, path) => { console.log(n, path); Object.keys(n).forEach(k => { dfs(n[k], path.concat(k)) }) } ...

2020-10-04 20:35:27 344

原创 [数据结构与算法]剑指 Offer 34. 二叉树中和为某一值的路径

输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]/** * Definition for a bi

2020-10-04 19:46:29 81

原创 [算法][JavaScript] 无重复字符的最长子串

function fn(s) { let l = 0 let res = 0 let resL = 0 let resR = 0 const map = new Map() for (let r = 0; r < s.length; r++) { if (map.has(s[r]) && map....

2020-10-02 22:37:20 58

原创 [JavaScript]给一个元素Element,找出这个元素的全部Input子元素

<body> <div id="div1"> <ul> <input type="text"> <li></li> <li> <input type="text"></li> <li></li> </ul> </div

2020-10-02 20:07:39 1172

原创 [JavaScript]如何将www.xxx.com变为com.xxx.www

一、正则: let str = 'www.aabbcc.com' console.log(str.replace(/(www)\.(\w+)\.(com)/, (m,x,y,z)=>{ return z+'.'+y+'.'+x })); // 也可以console.log(str.replace(/(www)\.(\w+)\.(com)/, `$3.$2.$1`))二、数组api let str

2020-10-02 19:54:42 64837

原创 [JavaScript]利用reduce手写一个flat函数,数组扁平化

var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]] function flatDeep(arr, d = 1) { return d > 0 ? arr.reduce( (acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [] ) : ...

2020-09-29 23:43:19 609

原创 [JavaScript]利用正则两行代码完全搞定hex转rgb

let str = "#1929fd" /* 如果匹配到是#12f这种简写的,则将其转化为#1122ff */ str = str.replace(/^#([a-f\d])([a-f\d])([a-f\d])$/i, (m, r, g, b) => '#'+r + r + g + g + b + b); str = str.replace(/^#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})/i, (m, r, g, b) ...

2020-09-29 23:09:50 228

转载 [JavaScript][ES6]关于Promise的面试题

https://juejin.im/post/6844904077537574919

2020-09-27 23:39:26 316

转载 [JavaScript]根据PromiseA+规范手写Promise

一、Promise的声明首先呢,Promise肯定是一个类,我们就用class来声明。• 由于 new Promise((resolve, reject)=>{}) ,所以传入一个参数(函数),PromiseA+里叫他executor(作业执行器),传入就执行。•executor里面有两个参数,一个叫resolve(成功),一个叫reject(失败)。•由于resolve和reject可执行,所以都是函数,我们用let声明。 class Promise {

2020-09-27 21:44:44 195

原创 [JavaScript]new操作符做了什么?如何实现一个 new?

做了什么?1、创建了一个空的js对象(即{})2、将空对象的原型prototype指向构造函数的原型3、将空对象作为构造函数的上下文(改变this指向)4、对构造函数有返回值的判断怎么实现?function _new(Con,...args){ //1、创建一个空的对象 let obj = {} // let obj = Object.create({}) //2、将空对象的原型prototype指向构造函数的原型 obj.__proto__ = Con.prot

2020-09-26 18:32:07 354

原创 [JavaScript]关于事件绑定和大循环的一些测试结论

一、大循环里有抛出错误 let a = 0 let b = 0 while(a<50000){ if(a === 30000){ throw Error } console.log("aaaaaaaaa") a++ } ok.onclick=()=>{ console.log

2020-09-26 17:36:55 75

原创 [JavaScript]深入理解arguments,aplly,call,bind,手写bind

此文为进阶理解,如果不熟悉标题中的arguments,aplly,call,bind,先去看他们的作用与基本用法一、函数属性&arguments function foo(x,y,z){ arguments.length // 2 (只传入了两个参数) // 注意,arguments是类数组对象,是没有join,slice这些数组对象的方法的 arguments[0] // 1

2020-09-25 23:32:11 162

原创 [网络]扫码登录实现原理解析

1.浏览器生成一个二维码,二维码里面包含微信的URL和一个随机的UUID,并轮询(或websocket)给服务器发消息2.客户端扫描二维码,得到一个把用户的信息和UUID绑定,发送给服务器3.服务器拿到这个用户的信息和UUID4.浏览器请求消息,服务器拿到用户的信息,进行更新...

2020-09-25 21:38:59 479

转载 [Vue]说说你对 SPA 单页面的理解,它的优缺点分别是什么?

SPA( single-page application )仅在 Web 页面初始化时加载相应的 HTML、JavaScript 和 CSS。一旦页面加载完成,SPA 不会因为用户的操作而进行页面的重新加载或跳转;取而代之的是利用路由机制实现 HTML 内容的变换,UI 与用户的交互,避免页面的重新加载。优点:• 用户体验好、快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染;• 基于上面一点,SPA 相对对服务器压力小;• 前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处

2020-09-23 15:56:45 1021

原创 [JavaScript]多行字符串转二维数组

const str = ` 1 21 3 4 5 6 7 8 9 `; /* 多行字符串要用反引号 */ var arr = str.split('\n'); /* 根据换行符分割 */ var res = new Array(); arr.forEach(function (item) { /* * 第一个replace是替换掉开头和最后的空格(\s包括空格和换行符),*表示0...

2020-09-20 17:30:56 1254

原创 [数据结构与算法]无重复字符的最长子串长度,字典

/** * @param {string} s * @return {number} */var lengthOfLongestSubstring = function(s) { let l = 0 /* 窗口左边指针 */ let res = 0 const map = new Map() for(let r = 0;r<s.length;r++){ /* 移动窗口右边指针 */ if(map.has(s[r]) && map.get(s

2020-09-20 16:47:41 70

原创 [JavaScript]块级作用域中变量声明的一个机制测试

var a =10 { a = 20 } console.log(a) // 20 { a = 30 function a (){} a = 40 } console.log(a) // 30 { a = 50 function a (){...

2020-09-20 11:37:56 77

原创 [JavaScript][] == ! [] 的结果为什么会是true

①、根据运算符优先级 ,! 的优先级是大于 == 的,所以先会执行 ![]!可将变量转换成boolean类型,null、undefined、NaN以及空字符串(’’)取反都为true,其余都为false。所以 ! [] 运算后的结果就是 false也就是 [] == ! [] 相当于 [] == false②、根据上面提到的规则(如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1),则需要把 false 转成 0也就是 [] == ! [] 相当

2020-09-19 16:43:07 426

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除