真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javascript深拷貝的方法有哪些

1、將對(duì)象轉(zhuǎn)換為JSON字符串形式,再將其轉(zhuǎn)換為原生JS對(duì)象;

專(zhuān)業(yè)領(lǐng)域包括成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、微信營(yíng)銷(xiāo)、系統(tǒng)平臺(tái)開(kāi)發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,創(chuàng)新互聯(lián)公司的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷(xiāo)的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

//_tmp和result是相互獨(dú)立的,沒(méi)有任何聯(lián)系,有各自的存儲(chǔ)空間。
let deepClone = function (obj) {
    let _tmp = JSON.stringify(obj);//將對(duì)象轉(zhuǎn)換為json字符串形式
    let result = JSON.parse(_tmp);//將轉(zhuǎn)換而來(lái)的字符串轉(zhuǎn)換為原生js對(duì)象
    return result;
};

let obj1 = {
    weiqiujaun: {
        age: 20,
        class: 1502
    },
    liuxiaotian: {
        age: 21,
        class: 1501
    }
};

let test = deepClone(obj1);
console.log(test);

2、使用JS中的for循環(huán)實(shí)現(xiàn)遍歷和復(fù)制;

function deepClone(obj) {
    let result = typeof  obj.splice === "function" ? [] : {};
    if (obj && typeof obj === 'object') {
        for (let key in obj) {
            if (obj[key] && typeof obj[key] === 'object') {
                result[key] = deepClone(obj[key]);//如果對(duì)象的屬性值為object的時(shí)候,遞歸調(diào)用deepClone,即在吧某個(gè)值對(duì)象復(fù)制一份到新的對(duì)象的對(duì)應(yīng)值中。
            } else {
                result[key] = obj[key];//如果對(duì)象的屬性值不為object的時(shí)候,直接復(fù)制參數(shù)對(duì)象的每一個(gè)鍵值到新的對(duì)象對(duì)應(yīng)的鍵值對(duì)中。
            }

        }
        return result;
    }
    return obj;
}

let testArray = ["a", "b", "c", "d"];
let testRes = deepClone(testArray);
console.log(testRes);
console.log(typeof testRes[1]);

let testObj = {
    name: "weiqiujuan",
    sex: "girl",
    age: 22,
    favorite: "play",
    family: {brother: "son", mother: "haha", father: "heihei"}
};
let testRes2 = deepClone(testObj);
testRes2.family.brother = "weibo";
console.log(testRes2);

3、利用數(shù)組的“Array.prototype.forEach”方法進(jìn)行復(fù)制即可實(shí)現(xiàn)深拷貝。

let deepClone = function (obj) {
    let copy = Object.create(Object.getPrototypeOf(obj));
    let propNames = Object.getOwnPropertyNames(obj);
    propNames.forEach(function (items) {
        let item = Object.getOwnPropertyDescriptor(obj, items);
        Object.defineProperty(copy, items, item);

    });
    return copy;
};

let testObj = {
    name: "weiqiujuan",
    sex: "girl",
    age: 22,
    favorite: "play",
    family: {brother: "wei", mother: "haha", father: "heihei"}
}
let testRes2 = deepClone(testObj);
console.log(testRes2);

以上就是JS 深拷貝的三種實(shí)現(xiàn)方式的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!


本文標(biāo)題:javascript深拷貝的方法有哪些
分享路徑:http://weahome.cn/article/geiees.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部