随笔分类 - javascript
js相关
摘要:不考虑正则、函数等奇怪类型的拷贝,满足大多数深度拷贝需求定制需求如下:1、循环引用2、Symbol 类型拷贝 function deepClone(val,map = new WeakMap()){ if(val null || typeof val !=='object') return val;
阅读全文
摘要:bfs利用队列实现,循环中做的是push => shift => push => shift dfs利用栈实现,循环中做的是push => pop => push => pop 刚刚好,中间仅仅差了一个数组方法: function bfs(target, id) { const quene = [.
阅读全文
摘要:大概思路是,用正则替换掉关键词。 let panter = new RegExp(关键词, 'g') 该行字符串.replace(panter, '<b style="color: #2D7BFF">' + 关键词 + '</b>')
阅读全文
摘要:Promise._race = promises => new Promise((resolve, reject) => { promises.forEach(promise => { promise.then(resolve, reject) }) })
阅读全文
摘要:时间复杂度为O(n): 其他遍历 function convert(list) { const res = [] const map = list.reduce((res, v) => (res[v.id] = v, res), {}) for (const item of list) { if (
阅读全文
摘要:思路应该是对 URL的组成部分 分别进行校验 protocol domain name port path (不用校验) params anchor (不用校验) 代码: 1、使用组成部分判断 const isUrl = urlStr => { try { const { href, origin,
阅读全文
摘要:function sum(arr, target) { const res = [] for (let i = 0; i < arr.length; i++){ const a = target - arr[i] const index = arr.indexOf(a,i) if (index>=0
阅读全文
摘要:从最终渲染的 DOM 来看,这两者都是链接,都是 <a> 标签, 区别是:<Link> 是 react-router 里实现路由跳转的链接,一般配合 <Route> 使用,react-router 接管了其默认的链接跳转行为,区别于传统的页面跳转,<Link> 的“跳转”行为只会触发相匹配的 <Ro
阅读全文
摘要:功能要求: add(1); // 1 add(1)(2); // 3 add(1)(2)(3); // 6 add(1)(2, 3); // 6 add(1, 2)(3); // 6 add(1, 2, 3); // 6 解答: 普通实现: function add(){ let args = [.
阅读全文
摘要:变量生命周期:声明(作用域注册一个变量)、初始化(分配内存,初始化为undefined)、赋值 var:遇到有var的作用域,在任何语句执行前都已经完成了声明和初始化,也就是变量提升而且拿到undefined的原因由来 function: 声明、初始化、赋值一开始就全部完成,所以函数的变量提升优先级
阅读全文
摘要:function zeroMove(array) { let len = array.length; let j = 0; for(let i=0;i<len-j;i++){ if(array[i] 0){ array.push(0); array.splice(i,1); i --; j ++;
阅读全文
摘要:[...Array(10000).keys()].filter((x) => { return x.toString().length > 1 && x Number(x.toString().split('').reverse().join('')) })
阅读全文
摘要:一、Promise概念 Promise是JS异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步编程解决方案之一。Promise.all()接受一个由promise任务组成的数组,可以同时处理多个promise任务,当所有的任务都执行完成时,Promise.all()返回r
阅读全文
摘要:function rotate(arr, k) { const len = arr.length const step = k % len return arr.slice(-step).concat(arr.slice(0, len - step)) } // rotate([1, 2, 3, 4
阅读全文
摘要:题:输出下列程序打印? // example 1var a={}, b='123', c=123; a[b]='b';a[c]='c'; console.log(a[b]); // example 2var a={}, b=Symbol('123'), c=Symbol('123'); a[b]='
阅读全文
摘要:存储模式: Chrome 浏览器JS引擎 V8中,数组有两种存储模式, 一种是类似C语言中的线性结构存储(索引值连续,且都是正整数的情况下), 一种是采用Hash结构存储(索引值为负数,数组稀疏,间隔比较大)。 读取方式: javaScript 没有真正意义上的数组,所有的数组其实是对象,其“索引”
阅读全文
摘要:<b id="count"></b> <button onclick="increase()">+</button> <button onclick="decrease()">-</button> const data = { count: 0 }; const proxy = new Proxy(
阅读全文
摘要:1. // 因为 T 的 length 是一定的,所以在循环S的的时候 ,循环当前项 i 后面至少还有 T.length 个元素 const find = (S, T) => { if (S.length < T.length) return -1; for (let i = 0; i <= S.l
阅读全文
摘要:1. function processString (s) { var arr = s.split(''); var new_arr = arr.map((item) => { return item item.toUpperCase() ? item.toLowerCase() : item.to
阅读全文
摘要:ES6转ES5分为以下两种情况1.语法转换ES6语法通过babel等工具为ES5语法,本质是将ES6语法转AST(抽象语法数——对编程语言编写的程序的一种描述)再将AST转为ES5语法代码;例如:let,const转换为var,箭头函数转换为function函数声明等2.API转换采用babel-p
阅读全文