I need to JSON.stringify a possibly cyclic object, which means that I have to pre-process the object and remove cycles. I'm already aware of the n^2 indexOf solution. Since that javascript doesn't seem to expose an object id or memory location, nor a generic hashcode for any object, is there a way to make the containment check faster?
            Asked
            
        
        
            Active
            
        
            Viewed 182 times
        
    -1
            
            
        - 
                    4possible duplicate of [Serializing object that contains cyclic object value](http://stackoverflow.com/questions/9382167/serializing-object-that-contains-cyclic-object-value) – fixmycode Sep 06 '15 at 22:31
- 
                    An ES6 `Set` object can keep track of objects visited directly. Work-arounds when that is not available usually involve adding a non-enumerable uniquely generated string key to each object so you can put that in a regular object map which is shown here in this polyfill: https://github.com/jfriend00/ES6-Set/blob/master/set.js – jfriend00 Sep 06 '15 at 22:32
- 
                    @jfriend00 thanks, that's probably what I was looking for. do you mind making that an answer? – ealfonso Sep 06 '15 at 22:49
1 Answers
1
            An ES6 Set object can keep track of objects visited directly.  As you're traversing through the object, you put each object into the Set and then a simple objSet.has(obj) will tell if you've already encountered this object of not.
Work-arounds when that ES6 Set is not available usually involve adding a non-enumerable uniquely generated string key to each object so you can put that in a regular object map which is shown here in this ES6 Set polyfill.
 
    
    
        jfriend00
        
- 683,504
- 96
- 985
- 979
