深拷贝实现原生数据结构的公用 模拟业务场景

/**
 * 数据结构
 * @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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值