当前位置: 首页 > news >正文

前端面试手撕题收集(自用)

对象深拷贝

function deepClone(source, clonedMap = new Map()) {if (typeof source !== object || source === null) {return source;  // 如果是基本类型,直接返回值,不需要深拷贝}// 如果这个对象已经被拷贝过,则直接跳过if (cloneMap.has(source)) {return cloneMap.get(source);}	const target = Array.isArray(source) ? [] : {};clonedMap.set(source, target);for (const key in source) {if (typeof source[key] === object && source !== null ){target[key] = deepClone(source[key], clonedMap);} else {target[key] = source[key];}}return target;
}

Promise

Promise.all

function all(promises) {return new Promise((resolve, reject) => {let resolvedCount = 0; // 统计有多少个promise达到resolvedlet results = new Array(promises.length);promises.forEach((promise, index) => {// 如果promise执行成功,将resolve的值存储到resule中,如果失败,直接进catchPromise.resolve(promise).then((value) => {resolvedCount++;results[index] = value;if (resolvedCount == promises.length) {resolve(results);  // new Promise对象时带的参数}}).catch((error) => {reject(error);})})})
}

promise.race

function race(promises) {return newPromise((resolve, reject) => {// 遍历所有promise。最先执行结束的promise决定了Promise.race的结果promises.forEach((promise) => {Promise.resolve(promise).then((value) => {resolve(value);}).catch((error)=>{reject(error);})})})
}

数组扁平化

Array.prototype.customFlatten = function() { let flat = [];for (let item of this) {if (Array.isArray(item)) {flat = flat.concat(item.customFlatten());} else {flat.push(item);}}return flat;
}

函数柯里化

function curry(fn) {return function curried(...args) {if (args.length >= fn.length) { // 参数个数达到length,执行原函数return fn.apply(this, args);} else { // 如果参数没有达到length,返回新的函数return function (...args2) {return curried.apply(this, args.concat(args2));}}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 极狐GitLab 如何管理 Kubernetes 集群?
  • 监控电脑屏幕的软件叫什么?8款好用的监控电脑屏幕的软件推荐!
  • 程序员阿龙定制开发【精选】计算机毕业设计之:基于JAVA问卷调查系统
  • 数据结构(Java实现):链表与LinkedList
  • 无法验证 Anaconda 仓库证书
  • 【系统架构设计】软件架构设计(2)
  • 云计算实训33——高并发负载均衡项目(eleme)
  • linux 工作中常用的命令
  • 标准UEFI Shell命令
  • 【论文笔记】独属于CV的注意力机制CBAM-Convolutional Block Attention Module
  • SpringBoot调用通义千问
  • Scratch编程新纪元:网络请求与数据解析的探索之旅
  • 13-springcloud gateway集成nacos实现负载均衡
  • 【0-1背包】力扣416. 分割等和子集
  • 大模型本地化部署2-Docker部署MaxKB
  • [NodeJS] 关于Buffer
  • 【RocksDB】TransactionDB源码分析
  • CentOS 7 修改主机名
  • const let
  • css属性的继承、初识值、计算值、当前值、应用值
  • Druid 在有赞的实践
  • ES6 ...操作符
  • Flannel解读
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java方法详解
  • js写一个简单的选项卡
  • mysql_config not found
  • react-native 安卓真机环境搭建
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 前端代码风格自动化系列(二)之Commitlint
  • 如何实现 font-size 的响应式
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 鱼骨图 - 如何绘制?
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #mysql 8.0 踩坑日记
  • (55)MOS管专题--->(10)MOS管的封装
  • (6)设计一个TimeMap
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • .net Application的目录
  • .net CHARTING图表控件下载地址
  • .Net OpenCVSharp生成灰度图和二值图
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET命令行(CLI)常用命令
  • .NET学习全景图
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • @ComponentScan比较
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • [ C++ ] STL---stack与queue
  • [].slice.call()将类数组转化为真正的数组
  • [100天算法】-二叉树剪枝(day 48)