深复制和二分法
1. 手写深复制
思路1
接收需要深复制的数据,返回深复制数据
1. 首先判断数据类型,如果是基本数据类型,直接返回
2. 如果是引用数据类型,判断是数组还是对象
3. 如果是数组,遍历数组,将每一项进行深复制,然后将复制后的数据push到一个新的数组中,最后返回新的数组
4. 如果是对象,遍历对象,将每一项进行深复制,然后将复制后的数据添加到一个新的对象中,最后返回新的对象
代码实现:
function deepClone(obj) { if (typeof obj !== 'object' || obj === null) { return obj } let result if (Array.isArray(obj)) { result = [] for (let i = 0; i < obj.length; i++) { result.push(deepClone(obj[i])) } } else { result = {} for (let key in obj) { result[key] = deepClone(obj[key]) } } return result }
思路2
接收需要深复制的数据和需要递归的初始化数据(防止报错),返回深复制数据
1. 首先判断数据类型,如果是基本数据类型,直接返回
2. 如果接收的数据是引用类型,则直接for in遍历, 判断该数据下的每个属性的类型
3. 如果属性是基础类型直接返回,否则判断是数组还是对象,对象就给当前返回值初始化{}, 数组则是[], 最后执行递归自身。(用的就是基础类型不共享同一指针,引用类型指向同一指针的原理实现深复制)
const deepCopy = (parent, child) => { if (typeof parent !== 'object' || parent === null) { return parent } const value = child || {}; for (var i in parent) { if (typeof parent[i] === 'object') { value[i] = (parent[i].constructor === Array) ? [] : {}; deepCopy(parent[i], value[i]); } else { value[i] = parent[i]; } } return value; } // const a = { // b: { // c: 1, // }, // d: [2,3,4,5], // e: 6 // } // console.log(deepCopy(a));
2. 快速排序(Quicksort)的Javascript实现
接收一个数组:[11,55,34,78,99,24,66,88,46];
输出:[11,24,34,46,55,66,78,88,99];
思路: 使用二分法
第一步:处理异常,如果数组长度小于等于1直接返回
第二步:获取一个数组的中间,定义左边和右边的空数组
第三步:遍历接收的数组,划分大左边或者右边的数据里
第四步:输出【递归左边】【中间数】【递归右边】直到左边和右边只有一个数字
第5步: 使用concat连接得到【左边,终究数,右边】,这时就已经完成了排序。
const quicksort = (arr: number[]) => { const len = arr.length; if (len <= 1) return arr; const middId = Math.floor(len / 2); const middValue = arr.splice(middId, 1)[0]; const leftArr: number[] = []; const rightArr: number[] = []; for (let i = 0; i < arr.length; i ++) { if (arr[i] <= middValue) { leftArr.push(arr[i]); } else { rightArr.push(arr[i]); } } return quicksort(leftArr).concat(middValue).concat(quicksort(rightArr)); } // quicksort([11,55,34,78,99,24,66,88,46])
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理