Suppose we have objects as map values and we want to deep clone the map. What is the proper way to do it?
            Asked
            
        
        
            Active
            
        
            Viewed 831 times
        
    1 Answers
-2
            
            
        Edit: If the values are not set or map this will work.
Deep clone:
var deepClonedMap = new Map(JSON.parse(JSON.stringify([...originalMap])))
var deepClonedSet = new Set(JSON.parse(JSON.stringify([...originalSet])))
let originalMap = new Map()
let data = {a:'a',b:'b'}
originalMap.set(1,data)
let shallowCloned = new Map(originalMap)
let deepCloned = new Map(JSON.parse(JSON.stringify([...originalMap])))
data.a = 'p'
console.log('originalMap:',[...originalMap])
console.log('shallowCloned:',[...shallowCloned])
console.log('deepCloned:',[...deepCloned]) 
    
    
        rebinnaf
        
- 276
- 2
- 9
- 
                    1Have you tested this with something like `originalMap.set(2,new Set([1,2,3,4]))`? – georg May 03 '21 at 15:39
- 
                    1Won't this break if the original map or set has circular references (i.e. some entry contains within it a reference back to the original set or map)? – Seth Lutske May 03 '21 at 15:39
- 
                    you are right, this works only if values are not set or map themselves. – rebinnaf Aug 26 '21 at 07:27