
手写代码
Chailo.
这个作者很懒,什么都没留下…
展开
-
【面试题集—No.13】柯里化面试题(参数确定)
题目:实现一个函数功能:sum(1,2,3,4…n)转化为 sum(1)(2)(3)(4)…(n)代码实现:function curry(fn, ...args) { return (...arr) => { let result = [...args, ...arr] if (result.length === fn.length) { return fn(...result) } else {原创 2021-11-23 22:08:57 · 494 阅读 · 0 评论 -
【面试题集—No.12】柯里化面试题(参数不确定)
实现一个add方法,使计算结果能够满足如下预期:add(1)(2)(3) = 6;add(1, 2, 3)(4) = 10;add(1)(2)(3)(4)(5) = 15;原创 2021-11-23 11:29:51 · 1055 阅读 · 2 评论 -
【面试题集—No.11】如何复制一个数组
写在前面:面试问到的话,需要尽可能多的把你在可以想到的方法答出来。在平时的算法练习中,拷贝数组是其中一个出现很频繁并且很重要的一步。这一章很轻松的~ 另外复习完这一部分,我接下来去整理一下常见的数组的API。首先,大家一定知道!但我在啰嗦一句,显得我这个 菜方方面面!var arr=["teery","larry","tom","jacky"];var arr1=arr; //不是克隆arr1==arr //true,指向同一个对象另外,这里是简单的针对数组的浅拷贝,关于拷..原创 2021-11-19 23:14:41 · 176 阅读 · 0 评论 -
【面试题集—No.08】过滤树的问题-深信服2021秋招
题目:过滤掉一个树形结构中不含给定的 filtername 的结点eg例子????:[{name: 'A', children: [ {name: 'B'} ]},{name: 'C'}] 以 filtername='B' 过滤后则成为 [{name: 'A', children: [ {name: 'B'} ]}]原理://原理:function fn(a){ if(a>3) return console.log(a); b=a+1; fn(b);原创 2021-11-15 22:04:52 · 457 阅读 · 0 评论 -
【手写代码】Object.assign() 原理及实现
????【手写代码】Object.create() 原理及实现原创 2021-11-15 14:48:59 · 824 阅读 · 0 评论 -
【面试题集—No.07】求数字数组中出现次数最多的数字
实现步骤:利用对象进行数组去重,并统计每个数字出现的次数; 比较返回出现次数最多的数字function fn(arr) { // 利用对象属性存在,对数组去重并统计每个数字出现的次数 let obj = {}; arr.forEach(e => { if (!obj[e]) { obj[e] = 1; } else { obj[e] = obj[e] + 1; }原创 2021-11-14 21:37:56 · 470 阅读 · 0 评论 -
【面试题集—No.06】js实现斐波那契数列
斐波那契数列:从第3项开始,每一项都等于前两项之和。例子????:1, 1, 2, 3, 5, 8, 13, 21, 34,55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368......1.递归法//递归法(时间复杂度O(n²))function fibonacci(n){ return n>2?fibonacci(n-1)+fibonacci(n-2):1;}2.优化版/原创 2021-11-14 21:23:49 · 483 阅读 · 0 评论 -
【手写代码】call,apply,bind 的区别和实现原理
目录一、call,apply,bind 区别作用:区别:应用场景:二、手写 call,apply,bind1.手写 call 函数2.手写 apply 函数3.手写 bind 函数简陋版完整版终极版一、call,apply,bind 区别作用:强制绑定this的指向问:为什么要强制绑定this的指向?答:使用call()或apply()可以让任意对象调用任意函数,等同于将函数作为了对象的属性,然后我们就可以通过对象.属性的方式调用函数。原创 2021-11-14 20:41:33 · 4450 阅读 · 0 评论 -
【面试题集—No.05】比较两个对象是否相同
先来复习一下关于对象属性遍历的API1.hasOwnProperty() 判断是否是对象自身属性2. Object.getOwnPropertyNames() 获取对象的可枚举和不可枚举属性3. Object.getOwnPropertySymbols() 获取对象的symbol属性4. Object.keys() 获取对象的可枚举属性5. for...in 获取对象自身和继承的可枚举属性(配合hasOwnProperty()使用)6. for...of 获取对象自身可...原创 2021-11-11 15:09:40 · 660 阅读 · 0 评论 -
【手写代码】new 操作符
作用:创建一个用户定义的实例对象或具有构造函数的内置对象的实例实现步骤:(1)创建了一个空对象(2)设置原型,将对象的__ proto__属性指向构造函数的prototype属性(3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)(4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。手写代码:function objectFactory() { // 准备:从参数列表中获取构造函数 ...原创 2021-11-09 15:00:19 · 761 阅读 · 0 评论 -
【手写代码】instanceof 运算符
作用:用于判断构造函数的 prototype 属性是否出现在对象的原型链中实现步骤:1.获取对象的原型对象(隐式)2.获取构造函数的原型对象(显式)3. 判断构造函数的原型对象是否在对象的原型链上手写代码://关键点;① 3个步骤,② getPrototype()function myInstanceof(left,right){ // 1.获取对象的原型对象(隐式) let proto = Object.getPrototypeOf(left) ..原创 2021-11-09 12:03:08 · 120 阅读 · 0 评论 -
关于JavaScript V8 输入输出(牛客网笔试)
1.单行输入let line = readline()let arr = line.split("")2.多行输入let lines = []while(line = readline()){ lines.push(line)}for(let i = 0; i < lines.length; i++){ let arr = lines[i].split(" ") print(parseInt(arr[0])+parseInt(arr[1]))}注意:字符原创 2021-10-31 19:05:17 · 1147 阅读 · 0 评论 -
【面试题集—No.02】实现数组去重的5种方法
方法一--两个循环嵌套遍历数组function unique(arr){ let newArr=[arr[0]]; for(let i=0;i<arr.length;i++){ let flag=true; for(let j=0;j<newArr.length;j++){ //遍历新数组,判断新数组中是否有该元素 if(arr[i]===newArr[j]){ flag=fals...原创 2021-11-06 20:35:34 · 145 阅读 · 0 评论 -
【手写代码】Object.create() 原理及实现
作用:创建一个新对象,使用现有的对象作为新创建的对象的隐式原型对象 __ proto__let people = { myName: 'chailo', age: 12, sex: 'female'}let me = Object.create(people)for(key in me){ console.log(key+':'+me[key])}// 输出:// myName:chailo// age:12// sex:female实现原理:...原创 2021-11-09 11:43:58 · 871 阅读 · 0 评论 -
【手写代码】深拷贝和浅拷贝
一、定义拷贝:就是赋值,把一个变量赋值给另一个变量,对变量的内容进行拷贝。了解深拷贝和浅拷贝之前需要对基本数据类型和引用数据类型的内存上存储(栈/堆)的区别有清楚地认识,深拷贝和浅拷贝是针对于引用数据类型。浅拷贝:拷贝后的数据会影响原数据深拷贝:产生了新的数据,而不是对原数据的引用判断依据:数据存放是对象在栈内存地址的引用还是对象的引用二、举例????1. 最简单的浅拷贝//地址的拷贝,不产生新的数据var arr = [1,2,4];Var new_arr = a原创 2021-11-02 14:21:58 · 831 阅读 · 0 评论 -
【手写代码】防抖&节流
一、防抖(debounce)1. 定义当连续触发一个事件时,将多次执行变成最后一次执行2. 场景有些事件会被频繁触发,但我们不需要他如此频繁,只在最后一次触发做操作即可。例如????搜索框的联想建议3. 手写防抖原理:在事件发生前,取消上一次的定时器,开启新的计时器function debounce(func,wait){ let timeout; return function(){ let context=this; let arg...原创 2021-09-25 08:14:26 · 470 阅读 · 0 评论