javascript for loop changes original list variable

后端 未结 3 1588
说谎
说谎 2021-01-26 20:40

I have a collection of objects called the response and I am creating another variable called object that\'s an empty object and creating object.array a

3条回答
  •  一整个雨季
    2021-01-26 21:07

    There is a difference between "shallow copies" and "deep copies/clones".

    Copied from the link above:

    Shallow copy

    Shallow copy is a bit-wise copy of an object. A new object is created that has an exact copy of the values in the original object. If any of the fields of the object are references to other objects, just the reference addresses are copied i.e., only the memory address is copied.

    Deep copy

    A deep copy copies all fields, and makes copies of dynamically allocated memory pointed to by the fields. A deep copy occurs when an object is copied along with the objects to which it refers.

    Here you find more information about how to do deep cloning: What is the most efficient way to deep clone an object in JavaScript?

    A possible solution:

    function runThisLoop () {
    
        var response = [{
            name: 'Name A',
            age: 2
        },
        {
            name: 'Name B',
            age: 7
        }]
    
    
        var object = {}
        object.array = JSON.parse(JSON.stringify(response));
    
        for (var val of object.array) {
            val.age = null
        }
    
        console.log("response", response)
        console.log("object.array", object.array)
    }
    
    runThisLoop()

    function runThisLoop () {
    
        var response = [{
            name: 'Name A',
            age: 2
        },
        {
            name: 'Name B',
            age: 7
        }]
    
    
        var object = {}
        object.array = response.map(x => x);
    
        for (var val of object.array) {
            val.age = null
        }
    
        console.log("response", response)
        console.log("object.array", object.array)
    }
    
    runThisLoop()

提交回复
热议问题