数组扁平化
总结的数组扁平化方法如下:
1,数组自带的方法flat12const arr = [1,[2,[3,[4,5]]],6]console.log(arr.flat(Infinity))
数组自带的扁平化方法,flat的参数代表的是需要展开几层,如果是Infinity的话,就是不过嵌套几层,
全部都展开。
如果写的是Infinity的话,就是不管你是多少维数组,都会直接转为一维数组
2,通过正则的方式来让数组扁平化1234const arr = [1,[2,[3,[4,5]]],6]const res = JSON.stringify(arr).replace(/\[|\]/g,'')const res2 = JSON.parse('[' + res + ']')console.log(res2)
首先是使用JSON.stringify把arr转为字符串。
接着使用正则把字符串里面的 [ 和 ]去掉。
然后再拼接数组括号转为数组对象。
3,(简单粗暴)递归12345678910111213const array = []con ...
package.json中dependencies和devDependencies的区别
在前端项目的package.json文件中,dependencies和devDependencies是两个重要的字段,它们之间的主要区别如下:
用途:
dependencies:这个字段列出了项目运行所依赖的模块。这些模块是项目正常运行所必需的。
devDependencies:这个字段列出了项目开发所需的模块。这些模块主要用于开发、测试或构建等过程,并不直接用于项目的日常运行。
安装方式:
dependencies:当使用npm install命令安装项目依赖时,会自动安装所有在dependencies字段中列出的模块。
devDependencies:对于devDependencies中的模块,需要使用--save-dev选项进行安装,例如npm install <module-name> --save-dev。
默认行为:当你运行npm install命令时,默认情况下,它会安装所有在dependencies字段中列出的模块,但不会安装devDependencies中的模块。如果你希望同时安装两者,需要使用特定的命令,如npm install --save- ...
Vue3+tsx开发语法详解
很多组件库都使用了TSX的方式开发,主要因为其灵活性比较高,TSX和SFC开发的优缺点就不介绍了,这里主要说一下将SFC项目改造为TSX的过程。
安装JSX库
安装完之后在vite.config.ts进行插件使用,代码如下:
然后就可以愉快的使用TSX来开发Vue组件了,下面主要说一下SFC和TSX的部分区别。
基本语法对照 SFCdefineComponent 和 setupSFC方式结构固定:template、script、style
TSX方式就完全是一个ts文件的写法,没有模板template和样式style
setup中函数的返回值有多种方式,可以直接返回html,这个适合结构简单的页面,如果返回比较多,可以使用如下方式:
如果是多节点,可以使用空符号包裹
在以上的方式中我们把除了布局以外的逻辑都写在//Todo部分,但是有时候我们需要做一些按条件渲染的逻辑,那么也可以在return里加处理逻辑,例如:
这种方式类似v-if,但是和v-if还是有点区别,v-if可以作用在更小的范围,而这种方式只适合整个组件的条件渲染,这个可能不好理解,在下面v ...
git分支命名规范
Git分支管理及命名规范一、分支分类
Git主分支(保留分支):master、develop
主要分支:Master和Develop。前者用于正式发布,后者用于日常开发。
Git辅助分支(临时分支):feature、release、fixbug
除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:
功能(feature)分支
预发布(release)分支
修补bug(fixbug)分支
这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。
二、分支简介1、主分支 Master代码库有且仅有一个主分支,所有提供给用户使用的正式版本,都在这个主分支上发布。 Git默认主分支Master,它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。
2、开发分支 Develop主分支只用来分布重大版本,日常开发应该在另一条分支上完成。我们把开发用的分支,叫做Develop。这个分支可以用来生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在Master分支上,对D ...
事件冒泡,捕获,委托
一、引言
JavaScript是一种广泛使用的脚本语言,用于为网页添加交互性。JavaScript的事件机制是实现用户交互的重要组成部分,它允许我们对用户的交互做出响应。在处理事件时,我们需要了解事件的传播方式以及如何使用事件委托来提高性能。
二、什么是事件捕获和事件冒泡事件机制是指当特定的操作(如点击按钮、移动鼠标等)在DOM元素上发生时,会触发相应的事件。JavaScript通过监听事件并绑定对应的处理函数来响应用户的操作,对用户的交互做出响应。
在JavaScript中,事件是以事件流的形式出现的,事件流顺序分为捕获和冒泡两种方式。 事件流分为三个阶段:1.捕获阶段 2.目标阶段 3.冒泡阶段。
事件捕获和事件冒泡是处理DOM事件的两种不同的机制。
三、事件捕获和冒泡的顺序事件捕获的顺序是从最外层的元素开始,逐级向内部元素传播,直到达到目标元素。 例如:window -> document -> html -> body -> div。
事件冒泡的顺序是从目标元素开始,逐级向外层元素传播,直到达到最外层的元素。 例如:div -> body -&g ...
js中堆和栈的概念和区别
一、 栈(stack)和 堆(heap)栈(stack):是栈内存的简称,栈是自动分配相对固定大小的内存空间,并由系统自动释放,栈数据结构遵循FILO(first in last out)先进后出的原则,较为经典的就是乒乓球盒结构,先放进去的乒乓球只能最后取出来;
堆(heap):是堆内存的简称,堆是动态分配内存,内存大小不固定,也不会自动释放,堆数据结构是一种无序的树状结构,同时它还满足key-value键值对的存储方式;我们只用知道key名,就能通过key查找到对应的value。比较经典的就是书架存书的例子,我们知道书名,就可以找到对应的书籍;
**栈的特点**:**开口向上、速度快,容量小;**堆的特点:速度稍慢、容量比较大;
二、 基本类型和引用类型
基本数据类型:Undefined,String,Boolean,Null,Number,都是直接按值存放在栈内存中,占用的内存空间的大小是确定的,并由系统自动分配和自动释放。这样带来的好处就是,内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。
引用数据类型:指那些可能由多个值构成的对象,如对象(Object)、数 ...
原型链-华顺信安实习一面
本题考察了构造函数与实例对象的关系、查找原型链的时机
1234567891011121314151617181920212223function A(){ this.x='hello'}A.prototype.x='world'const a=new A();a.x='what'console.log(a.x);delete a.x;console.log(a.x);delete a.x;console.log(a.x);a.x=undefined;console.log(a.x);//what//world//world//undefined首先要理解,构造函数中的this.x和a.x有什么区别?其实就是相同的,在构造完毕之后,this被绑定在了实例对象a上面。
所以在不进行任何操作时,仅仅生成实例对象a并打印a.x输出的结果是’hello’
对四个a.x的操作逐行分析:
第一个a.x:修改之后打印修改后的值【’what’】第二个,删除a.x:删除此时a实例对象上的x属性,此时a.x访问不到有效属 ...
二叉树层序遍历
力扣-102.二叉树的层序遍历给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
12输入:root = [3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]
示例 2:
12输入:root = [1]输出:[[1]]
示例 3:
12输入:root = []输出:[]
代码实现如下1234567891011121314151617181920212223242526272829303132333435363738394041424344/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null ...
script标签中defer,async的区别
< script >标签中的 async 和 defer 属性都是用来控制外部 JavaScript 文件的加载和执行时机的。它们的目的是优化页面加载性能,避免脚本的加载和执行阻塞页面的渲染过程。下面是 async 和 defer 两个属性的用途和它们之间的区别。
Async (异步)当在< script >标签中使用 async 属性时,浏览器会在后台异步加载 JavaScript 文件,不会阻塞 HTML 文档的解析。即使 JavaScript 文件下载完成,只要 HTML 解析还未结束,脚本不会立即执行。只有在文件加载完成后,它才会尽快执行,无论 HTML 解析是否完成。这意味着 async 脚本的执行时机是不确定的,可能会在文档解析完成前或完成后。
Defer (延迟)当你在< script >标签中使用 defer 属性时,浏览器也会异步加载 JavaScript 文件,但会延迟执行这个脚本,直到整个页面的 HTML 都解析完成。这确保了脚本只会在文档解析完成之后、在 DOMContentLoaded 事件之前执行。如果有多个带有 defer 属性的脚 ...
Excel列表名称
力扣-168.Excel列表名称给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:
12345678A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28 ...
示例 1:
12输入:columnNumber = 1输出:"A"
示例 2:
12输入:columnNumber = 28输出:"AB"
示例 3:
12输入:columnNumber = 701输出:"ZY"
示例 4:
12输入:columnNumber = 2147483647输出:"FXSHRXW"
解题思路将给定的十进制数转换为26进制的形式,其中A表示 1,B 表示2,以此类推。从给定的数n 开始,每次取余数和商,余数对应A-Z的ASCII码值将每个余数对应的字符拼接到结果字符串的开头更新n的值为商,重复上述步骤,直到 n变为0最终得到的结果字符串即为 Excel表中相对应的列名称。
算法实现1234567891 ...