自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王先生的博客

一个专注技术的码农

  • 博客(14)
  • 收藏
  • 关注

原创 js随机洗牌算法

const arr = [1,1,2,3,4,4];//随机排序for (let i = arr.length - 1; i >= 0; i--) { //生成任意随机数 const num = Math.floor(Math.random() * i); const temp = arr[num]; //从arr中取出来的随机元素 arr[num] = arr[i] //设置arr的随机元素为当前的for循环的值 arr[i] = temp; //.

2021-09-02 15:58:19 198

原创 使用函数柯里化实现add(1)(2)(3)

const add = (a, b, c) => a + b + c;const curry = (fn) => { let args = []; //返回一个函数 return function temp(...newArgs) { args.push(...newArgs);//储存数据 //数组长度和函数形参个数一致 if (args.length === fn.length) { con.

2021-08-16 16:51:55 973

原创 JS实现lodash的get方法

使用场景在 js 中经常会出现嵌套调用这种情况,如 a.b.c.d.e,但是这么写很容易抛出异常。你需要这么写 a && a.b && a.b.c && a.b.c.d && a.b.c.d.e,但是显得有些啰嗦与冗长了。特别是在 graphql 中,这种嵌套调用更是难以避免。这时就需要一个 get 函数,使用 get(a, 'b.c.d.e') 简单清晰,并且容错性提高了很多。function get(source...

2021-08-16 15:53:48 1534

原创 JS把一堆数组分成三份尽量相等

思路: 先对数组进行排序,,然后取出平均值计算function f1 (arr,count){ //数组从大到小排序 arr.sort((a,b) => b - a); //计算平均值 let avg = arr.reduce((a,b) => a + b) / count; //从大到小求和,取最接近平均值的一组,放入二维数组 let resArr = []; let current = 0; for (...

2021-08-16 15:40:27 2026

原创 Css盒模型

css盒子模型具备内容(content)、填充(padding)、边框(border)、边界(margin)这些属性我们可以用日常生活中的常见事物——盒子作一个比喻来理解,所以叫它盒子模式。CSS盒子模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型。box-sizing属性box-sizing:content-box是属性默认,即宽度和高度只应用于元素内容 box-sizing:border-box:边框和内边距的值是包含在 width 内的。也就是说,如果你将一个元素..

2021-08-13 14:27:40 41

原创 Js实现实现斐波那契数列

1、使用数组方法实现function fib(n) { if (n < 2) return n; let list = [0,1]; for (let i = 1; i < n; i++) { list[i + 1] = list[i] + list[i - 1]; } return list[n];}2、使用递归实现function fib(n) { if (n < 2) return n; function _fib(n, a,.

2021-08-13 10:21:31 277

原创 Js中怎么判断数据是数组类型

1、使用instanceofconsole.log([] instanceof Array) //true2、使用constructorconsole.log([].constructor === Array) //true3、Array.isArray()console.log(Array.isArray([])) //true4、Object.prototype.toString.call([])console.log(Object.prototype.toStrin

2021-08-12 17:44:48 97

原创 写一个 mySetInterVal(fn, a, b),每次间隔 a,a+b,a+2b,...,a+nb 的时间,然后写一个 myClear,停止上面的 mySetInterVal

function mySetInterVal(fn, a, b) { let time = 0; let timer = { id: -1 }; const start = (timeout) => { timer.id = setTimeout(() => { fn(); time++; start(timeout + time * b); .

2021-08-06 13:04:01 273

原创 用最精炼的代码实现数组非零非负最小值 index

const getindex = (arr)=> arr.findIndex(item=>item == (arr.filter(i=>i>0).sort((a,b)=>a-b))[0])

2021-08-06 00:53:49 177

原创 手写简单Promise实现

function MyPromise(executor) { this.PromiseState = 'pending' this.PromiseResult = null this.callbacks = [] const self = this; //成功函数 function resolve(value) { if (self.PromiseState !== 'pending') return self.Promis.

2021-08-05 10:32:36 65

原创 递归遍历key实现对象的格式化

前几天面试看到一道题目挺有意思,是把深层的对象格式转化为 单独的k:v形式比如{ a:{ b:{ c:{ d:{ e:'哈哈哈' } } } }, aa:{ d: 123 }, bb:{ e: '123' }}//转化为{

2021-04-29 17:03:28 120

原创 Vue2和Vue3数据驱动原理

一、什么是响应式数据驱动?响应式就是Vue会同时使用该数据的代码,数据层发生改变会通知到视图层二、Vue2数数据驱动实现Vue2中数据驱动是使用的Es5中的object.defineProperty实现的数据劫持响应function defineProperty(obj, key, value) { observer(value)//递归 Object.defineProperty(obj, key, { get: () => {

2021-04-12 11:43:01 519

原创 js算法-旋转数组

js常见的几种旋转数组方法使用unshift和pop方法function rotate(arr, k) { for(let i=0;i<k;i++){ arr.unshift(arr.pop()) /*arr.pop是删除数组最后一个元素并返回,arr.unshift是把元素添加到数组的头部 所以经过第一次删除后数组为[-100,5,2,-1] 经过第二次后数组元素为[-1,-100,5,2]满足需求 */

2021-04-08 22:44:45 486

原创 关于前端赋值、深拷贝、浅拷贝

关于前端赋值、深拷贝、浅拷贝一、赋值赋值是将某一数据类型或对象赋给某一变量的过程,js中的数据类型分为基本数据和引用数据类型也就是对象类型1.基本数据类型包括(null、undefined、number、string、boolean)2.引用数据类型包括(array、object、function)使用typeof返回array的数据类型其实是object,因为在javascript中,array就是object基本数据类型的赋值let a = 20,b=a;console.lo

2021-03-30 14:01:41 664

空空如也

空空如也

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

TA关注的人

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