How to Deep clone in javascript

前端 未结 19 1755
-上瘾入骨i
-上瘾入骨i 2020-11-22 02:06

How do you deep clone a JavaScript object?

I know there are various functions based on frameworks like JSON.parse(JSON.stringify(o)) and $.extend(t

19条回答
  •  旧时难觅i
    2020-11-22 02:50

    Use immutableJS

    import { fromJS } from 'immutable';
    
    // An object we want to clone
    let objA = { 
       a: { deep: 'value1', moreDeep: {key: 'value2'} } 
    };
    
    let immB = fromJS(objA); // Create immutable Map
    let objB = immB.toJS(); // Convert to plain JS object
    
    console.log(objA); // Object { a: { deep: 'value1', moreDeep: {key: 'value2'} } }
    console.log(objB); // Object { a: { deep: 'value1', moreDeep: {key: 'value2'} } }
    
    // objA and objB are equalent, but now they and their inner objects are undependent
    console.log(objA === objB); // false
    console.log(objA.a === objB.a); // false
    console.log(objA.moreDeep === objB.moreDeep); // false
    

    Or lodash/merge

    import merge from 'lodash/merge'
    
    var objA = {
        a: [{ 'b': 2 }, { 'd': 4 }]
    };
    // New deeply cloned object:
    merge({}, objA ); 
    
    // We can also create new object from several objects by deep merge:
    var objB = {
        a: [{ 'c': 3 }, { 'e': 5 }]
    };
    merge({}, objA , objB ); // Object { a: [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
    

提交回复
热议问题