/** * 数据结构 * @type {*[]} */ var ArrayJson = [ { pageName: "pageOne", children: [{name: "秦乙", age: "24"}, {name: "张三", age: "17"}, {name: "王五", age: "30"}] }, { pageName: "pageTwo", children: [{universityName: "jcu", country: "加拿大"}, { universityName: "清华大学", country: "中国" }, {universityName: "MIT", country: "美国"}] } ] /** * 解构数据结构 * @param pageName 需要拷贝的数据结构的名称 * @param obj 原生综合数据结构 * @param arr 综合数据结构下的所有子数据结构的索引集 * @param checkObject 重构数据结构 * @returns {*[]} 深度拷贝的子数据结构 */ function dosucess(obj,pageName,arr,checkObject) { var tempObj = {}; // 临时对象 //遍历所有的子数据结构 obj.forEach((curItem,index) => { //如果当前数据结构的结构名称为需要查找的结构名并且该数据结构的索引没有被记录 if (curItem.pageName === pageName&&arr.indexOf(index)===-1) { arr.push(index) //遍历该数据结构下的所有key for (let key in curItem) { //如果当前key值为Array类型 if (Array.isArray(curItem[key])) { //深拷贝当前key值 let temp = deepClone1(curItem[key]); console.log(temp) //为key值新增属性 temp.forEach((curItem) => { //将该数据结构传入回调函数处理 checkObject(curItem) }); //将重构完成的键和键值拷贝至临时对象 tempObj[key] = temp; } else { tempObj[key] = curItem[key] } } } }); return [tempObj]; } var tempArr=[]; dosucess(ArrayJson,"pageOne",tempArr,(obj)=> { //剥离为回调函数 让回调函数重构 for(let key in obj){ if(obj['infor']===undefined){ obj['infor']=obj[key] }else { obj['infor']=obj['infor']+obj[key] } } }) /** * 递归深度遍历数据结构,对数据结构进行深拷贝 * @param obj * @returns {*} */ function deepClone1(obj) { var objClone = Array.isArray(obj) ? [] : {}; if (obj && typeof obj === "object") { for (let key in obj) { if (obj.hasOwnProperty(key)) { if (obj[key] && typeof obj[key] === "object") { objClone[key] = deepClone1(obj[key]); } else { objClone[key] = obj[key]; } } } } return objClone; }
深拷贝实现原生数据结构的公用 模拟业务场景
最新推荐文章于 2023-11-19 17:12:14 发布