- 博客(28)
- 收藏
- 关注
原创 旋转数组算法题
旋转数组算法题给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数输入: [1, 2, 3, 4, 5, 6, 7] 和 k = 3输出: [5, 6, 7, 1, 2, 3, 4]解释:向右旋转 1 步: [7, 1, 2, 3, 4, 5, 6]向右旋转 2 步: [6, 7, 1, 2, 3, 4, 5]向右旋转 3 步: [5, 6, 7, 1, 2, 3, 4]function rotateArr(arr, len){ if(len < 0 || .
2021-04-10 16:47:25
133
原创 Promise.finally
Promise.prototype.finally = function(cb){ cb = typeof cb === 'function' ? cb : function(){}; let Pro = this.constructor; return this.then( value => Pro.resolve(cb()).then(() => value), reason => Pro.resolve(cb()).then(() => throw reason)
2021-04-07 22:52:41
158
原创 字符串大小写取反,如:‘AbC‘ 变成 ‘aBc‘
function swapString(str){ return str && str.replace(/[a-zA-Z]/g, val => /[a-z]/.test(val) ? val.toUpperCase() : val.toLowerCase()) || '';}swapString('adASjOdapASJO!@#4123123.l124'); // "ADasJoDAPasjo!@#4123123.L124"
2021-04-07 22:38:07
368
原创 js - 数组扁平化
迭代方式:function myFlatten(arr){ if(!arr || !arr.length) return []; let newArr = [...arr]; let flattenArr = []; while(newArr.length){ let item = newArr.shift(); if(Array.isArray(item)){ newArr.unshift(...item); }else{ flattenArr.push(item);
2021-04-07 18:16:46
81
原创 树的先序/中序/后序遍历
树的结构如下:先序(深度搜索遍历DFS):先顶点,再左边节点,接着右边节点前序结果:ABDEHICFG中序:先左边节点,再顶点,最后右边节点中序结果:DBHEIAFCG后序:先左边节点,然后右边节点,最后为顶点后序结果:DHIEBFGCA树的三只序遍历结果:前序中序后序主要是记住顶点的顺序,顶点先遍历的是前序,顶点在中间遍历的是中序,顶点最后遍历的是后序,无论哪种序都是先遍历左节点再遍历右节点。树的层级遍历(广度搜索遍历)是按照层级遍历,即先第一层再第二层第三层。。。层级遍历
2021-04-06 15:59:15
3286
原创 js 防抖跟节流函数的实现
//防抖function debounce(fn, timeout){ let timer = null; return function(){ timer && clearTimeout(timer); timer = setTimeout(() => { fn.apply(this, arguments) }, timeout) }}//节流function throttle(fn, timeout){ let flag = false; ret
2021-04-02 17:49:04
92
原创 请把俩个数组 [A1, A2, B1, B2, C1, C2, D1, D2] 和 [A, B, C, D],合并为 [A1, A2, A, B1, B2, B...
请把俩个数组 [A1, A2, B1, B2, C1, C2, D1, D2] 和 [A, B, C, D],合并为 [A1, A2, A, B1, B2, B, C1, C2, C, D1, D2, D]function unionArray(A, B){ return [...A, ...B].sort((a, b) => { if(a.charCodeAt() > b.charCodeAt()){ return 1; }else if(a.charCodeAt() &.
2021-04-01 14:25:21
728
原创 实现一个 normalize 函数,能将输入的特定的字符串转化为特定的结构化数据
题目:实现一个 normalize 函数,能将输入的特定的字符串转化为特定的结构化数据字符串仅由小写字母和 [] 组成,且字符串不会包含多余的空格。示例一: ‘abc’ --> {value: ‘abc’}示例二:’[abc[bcd[def]]]’ --> {value: ‘abc’, children: {value: ‘bcd’, children: {value: ‘def’}}}function normalize(str){ let result = {}, obj = .
2021-03-31 18:05:00
330
原创 js 字符跟二进制互转,二进制跟base64互转
//字符转二进制function str2binary(str){ if(!str) return; if(typeof str !== 'string') return; const zero = '00000000'; let bi = ''; for(let i of str){ let num = zero + i.charCodeAt().toString(2); //获取二进制 bi += num.slice(-8); //取8位二进制 } return bi;}/
2021-03-31 11:12:35
1647
原创 js 模糊搜索 关键词高亮显示
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>auto comple
2021-03-30 18:31:00
426
原创 setTimeout 实现 setInterval
//方法一function mySetInterval(fn, timeout = 0, ...args){ const _self = this; const _setTimeout= function(){ setTimeout(() => { fn.apply(_self, args); _setTimeout(); }, timeout) } _setTimeout();}//方法二function mySetInterval(fn, timeout =
2021-03-30 15:28:42
101
原创 setTimeout的简易实现
var mySetTimeout = function(fn, timeout = 0, ...args){ var start= +new Date(); var timer, now; var loop = () => { timer = window.requestAnimationFrame(loop); now = +new Date(); if(now - start >= timeout){ fn.apply(this, args); window.
2021-03-30 11:41:35
401
原创 js 获取url上的参数
//name为需要获取值的参数function getUrlParam(name, url){ url = url || window.location.href;//如果不传则取当前网址 var res = {}; url.replace(/[?|&](\w+)=([^&#]*)/g, (all, key, val) => { res[key] = val; return all; }) return res[name] || '';}//测试//网址为:
2021-03-26 21:19:02
152
原创 js reduce函数简易实现
Array.prototype.myReduce = function(fn, initialVal){ if(this === null){ throw new Error('对象为空') } if(typeof fn !== 'function'){ thow new Erroe('请传入函数') } var o = Object(this), len = o.length >>> 0, nextVal, i = 0; if(initialVal){.
2021-03-26 17:09:37
224
原创 js中forEach、map、filter、some、every函数的简易实现
forEach跟map函数区别在于map有返回值,forEach无返回值map跟filter函数的区别在于filter会过滤值,而map直接返回值//forEachArray.prototype.myForEach = function(fn){ if(typeof fn !== 'function'){ throw new Error('请传入函数!') } var o = this, len = o.length <<< 0, _this = arguments
2021-03-26 16:10:04
147
原创 animation动画函数实现
//获取dom中具体prop属性的值function getStyle(dom, prop){ if(dom.currentStyle){//兼容IE6/7/8 return dom.currentStyle[prop]; }else{ return window.getComputedStyle(dom, null)[prop]; }}function animation(dom, json, time = 30, cb){ clearInterval(dom.timer);//多
2021-03-26 15:03:18
428
原创 getElementsByClassName函数实现
Element.prototype.getElementsByClassName = Document.prototype.getElementsByClassName = function(_className){ const allEle = document.getElementsByTagName('*'); let classesEle = []; //去掉前后空格,如果类名之间的空格大于2个,则替换为一个空格 const trim = str => typeof str ==..
2021-03-26 01:11:28
235
原创 insertAfter方法的实现
第一种:直接在父节点里面插入的情况//直接在节点原型上新增方法Element.prototype.insertAfter = function(target, ele){ const nextEle = ele.nextSibling || ele.nextElementSibling; if(nextEle){ this.insertBefore(target, nextEle); }else{ this.appendChild(target);//ele为最后一个节点,可直接使用app
2021-03-25 22:51:49
485
原创 js 自定义时间格式
//设置时间格式function dateFormat(date, format) { if (!date) return '1970-01-01 00:00:00'; if (!format) format = "yyyy-MM-dd HH:mm:ss"; let type = typeof date; if(type === 'string'){ date = new Date(date.replace(/-/, "/")); }el
2021-03-22 18:16:34
519
原创 js 计算含中文的字符串长度
//一个中文算两个字符function getStrLength(str){ if(!str) return 0; //先去除前后空格,然后把中文用两个空格替换,再获取长度 return str.replace(/^\s+|\s+$/g, '').replace(/[^\x00-xff]/gm, ' ').length;}//使用var str = ' 我们的祖 国aaa是花园 ';var len = getStrLength(str); // 20..
2021-03-22 17:46:31
825
原创 js 多属性排序
/*** 按照属性排序* @param item1 比较第一项* @param item2 比较第二项* @param 属性值对象 如:{"name": "asc", "age": "desc", 'num': 'desc' }**/function SortByProps(item1, item2, obj) { if(obj) { let asc = true; for (let o in obj) { if(obj.hasOw
2021-03-22 16:45:55
209
原创 Promise简易实现
class MyPromise{ constructor(executor){ this.status = 'pending'; this.value = undefined; this.reason = undefined; this.onFullfillcbs = []; this.onRejectcbs = []; const resolve = val => { i.
2021-03-19 18:37:29
69
原创 JS - 深拷贝
可拷贝原始类型:Number、Boolean、String、Symbol可拷贝引用类型:Set、Map、Date、RegExp、Function、Array、Objectfunction deepClone(target){ //判断是否为对象 const isObject = target => { if(target === null){ return false; }else { return typeof target === 'objec
2021-03-18 19:25:15
83
原创 ES5实现new功能
function myNew(){ var constructor = Array.prototype.shift.call(arguments), //获取第一个参数 result = null, //存结果 newObj = null, //存放新对象 flag = false; //判断返回值是不是对象或函数flag if(!constructor || typeof constructor !== 'function'){//判断参数.
2021-03-17 18:48:03
365
原创 随机生成32位uuid
今天看到一段可爱的代码,获取32位uuid的方法,嘻嘻//获取32位uuid方法function getUuid() { return ('xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random()*16|0, //随机生成 0 -15的数字 v = c == 'x' ? r : (r&0x3|0x8); //c为y时只取8、9、a、b中的一个 retu
2021-03-17 18:38:38
1025
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人