| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> js克隆一个对象和递归 -> 正文阅读 |
|
[游戏开发]js克隆一个对象和递归 |
function deepClone(target, object) { ? ? for (let k in object) { ? ? ? ? if (typeof object[k] === 'object') { ? ? ? ? ? ? target[k] = {}; ? ? ? ? ? ? deepClone(target[k], object[k]); ? ? ? ? } else { ? ? ? ? ? ? target[k] = object[k]; ? ? ? ? } ? ? } } // 测试用例 let obj = { ? ? a: 1, ? ? b: [1, 2, 3], ? ? c: {} }; let emptyObj ={}; deepClone(emptyObj, obj); emptyObj['a']=10; console.log("目标对象::",emptyObj); console.log("原对象",obj); 今天同事在做一个树形结构数据,需要过滤掉数组中不合法的项。具体示例如下面代码中的 json 结构,需要过滤到所有 isFolder 值为0的项。 第一次写居然错了,只导出最下面一层,晚上自己琢磨了一下改了改,用是可以用了,但是注释部分自己都有点不太明白。 简单做个记录,以后有时间再研究一下递归函数。 /** ?* 过滤数组不合法项 ?* @param {Array} arr 传入目标数组 ?* @returns 过滤后的数组 ?* ?不是常规的递归函数,但是结果是正常的。 ?*/ ?let recurData = (arr) => { ? ? // 用一个变量来记录传入数组当前层次过滤后的集合。 ? ? let tempArr = arr.filter(item => !!item.isFolder) ? ? // 循环遍历,有children的项,并递归 ? ? for (let item of tempArr) { ? ? ? if (item.children && item.children.length) { ? ? ? ? // 这里是关键,相当于是修改当前层次的children,递归以后就不会影响上一层的数据而且永远是修改的下一层的数据。 ? ? ? ? item.children = recurData(item.children) ? ? ? } ? ? } ? ? // 这里导出第一次过滤后的数据,但是for循环是同步运行的,所以只有递归结束以后才会触发return,当数据量大时性能会下降。 ? ? return tempArr ? } ? let json = [ ? ? { ? ? ? id: 1, isFolder: 1, children: [ ? ? ? ? { id: '1-2', isFolder: 0 }, ? ? ? ? { id: '1-3', isFolder: 1 }, ? ? ? ? { ? ? ? ? ? id: '1-4', isFolder: 1, ? ? ? ? ? children: [ ? ? ? ? ? ? { id: '1-4-1', isFolder: 1 }, ? ? ? ? ? ? { id: '1-4-2', isFolder: 0 }, ? ? ? ? ? ? { id: '1-4-3', isFolder: 1 }, ? ? ? ? ? ? { id: '1-4-4', isFolder: 0, } ? ? ? ? ? ] ? ? ? ? }, ? ? ? ] ? ? }, ? ? { id: 2, isFolder: 0 }, ? ? { id: 3, isFolder: 1 }, ? ? { id: 4, isFolder: 0 }, ? ? { id: 5, isFolder: 1 }, ? ] ? let result = recurData(json) ? console.log(JSON.stringify(result)) ? //[{"id":1,"isFolder":1,"children":[{"id":"1-3","isFolder":1},{"id":"1-4","isFolder":1,"children":[{"id":"1-1-1","isFolder":1},{"id":"1-1-3","isFolder":1}]}]},{"id":3,"isFolder":1},{"id":5,"isFolder":1}]
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 18:37:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |