2015-09-06 3 views
-1

Мне нужно JSON.stringify возможно циклический объект, что означает, что я должен предварительно обработать объект и удалить циклы. Я уже знаю n^2 indexOf solution. Учитывая, что javascript, кажется, не предоставляет идентификатор объекта или место памяти, а также общий хэш-код, есть ли способ ускорить проверку сдерживания?JSON.stringify циклический объект n^2

+4

Возможный дубликат [Сериализующий объект, содержащий значение циклического объекта] (http://stackoverflow.com/questions/9382167/serializing-object-that-contains-cyclic-object-value) – fixmycode

+0

Объект ES6 'Set' может следить за просмотренными объектами напрямую. Рабочие процессы, когда это недоступно, обычно включают добавление неперечислимого уникально сгенерированного строкового ключа к каждому объекту, поэтому вы можете поместить его на обычную карту объектов, которая показана здесь на этом полифоне: https://github.com/jfriend00/ ES6-Set/blob/master/set.js – jfriend00

+0

@ jfriend00 спасибо, это, наверное, то, что я искал. не возражаете ли вы сделать ответ? – erjoalgo

ответ

1

Объект ES6 Set может отслеживать объекты, которые были просмотрены напрямую. Когда вы проходите через объект, вы помещаете каждый объект в Set, а затем простой objSet.has(obj) расскажет, что вы уже столкнулись с этим объектом.

Работы, когда этот набор ES6 недоступен, обычно включают добавление неперечислимого уникально сгенерированного строкового ключа к каждому объекту, поэтому вы можете поместить его на обычную карту объектов, которая показана здесь в этом ES6 Set polyfill.

Смежные вопросы