Определите “циклические структуры данных”

На сайте JSON это говорит

JSON не поддерживает циклические структуры данных, так старается не дать циклические структуры JSON stringifier.

Что означает этим? Кто-то может дать мне пример такой структуры данных в JavaScript?

25
задан Earlz 9 June 2010 в 22:09
поделиться

8 ответов

var cyclic = {};
cyclic.somekey = cyclic;
cyclic.another = "Hello world!";

Теперь вы можете сделать это, например:

alert(cyclic.somekey.somekey.somekey.another);
31
ответ дан 28 November 2019 в 21:03
поделиться
js> var a = {label:"a", next:null};
js> var b = {label:"b", next:a};
js> a.next = b; // cycle is created here
[object Object]
js> print(a.next.label);
b
js> print(a.next.next.label);
a
js> print(a.next.next.next.label);
b
js> print(a.next.next.next.next.label);
a
1
ответ дан 28 November 2019 в 21:03
поделиться

Думаю, учебным примером циклической структуры является двусвязный список . Каждый элемент указывает на предыдущий и следующий элементы в списке. Это означает, что каждый элемент образует цикл с предыдущим и следующим элементом.

A --> B  --> C
A <-- B  <-- C

(Здесь каждый A, B, C, хотя и написанный дважды, представляет собой один объект.)

A указывает на B, как следующий в списке. B указывает на A, как и предыдущее в списке. Таким образом, существует цикл от A до B и обратно к A. То же самое верно для каждого элемента в списке, с элементами, не входящими в начало или конец, принадлежащими двум циклам.

Одним из решений сериализации списков, подобных этому, является использование идентификаторов для представления каждого объекта. Это удаляет циклы в структуре. Затем мы могли бы написать

  list: {
     items:
      { id:"a", value1: ... etc },
      { id:"b", values .... },
      { id:"c", values .... }
     links:
       { elem:"a", next:"b" },
       { elem:"b", next:"c", prev: "a"},
       { elem:"c", prev:"b" }
  }
1
ответ дан 28 November 2019 в 21:03
поделиться

, если у вас есть:

var a = {value: 'a'};
var b = {value: a};
var c = {value: a};

В JSON для b это будет выглядеть так:

"{value: {value: 'a'}}"

В JSON для c это будет выглядеть так:

"{value: {value: 'a'}}"

Нет указателей.

-2
ответ дан 28 November 2019 в 21:03
поделиться

Если вы представите элементы структуры данных, представленные в виде графа, циклическая структура данных - это то место, где член ссылается на другой элемент или на саму структуру.

Например:

var obj = new Object();

obj.left = new Object();

obj.left.left = obj;

Это невозможно представить в JSON, вам нужно как-то сослаться на внешнюю часть {} :

{ "left": { "left": ??? } }
8
ответ дан 28 November 2019 в 21:03
поделиться

Объект содержит цикл, т.е. он ссылается сам на себя или, в более общем случае, какой-то объект, на который он ссылается либо напрямую, либо через какое-то свойство, является исходным объектом.

 var $this =  { };
 $this["self"] = $this;

или более вероятно

 var child = { parent: null };
 var parent = { child: child };
 child.parent = parent;
2
ответ дан 28 November 2019 в 21:03
поделиться

Циклическая структура данных - это структура, которая содержит ссылку на саму себя (прямо или косвенно). См. также http://en.wikipedia.org/wiki/Circular_reference

Вот пример такой структуры:

var c = { value: 'abc' };
c['c'] = c;
c['a'] = { value: c };

Если попытаться рекурсивно вывести ее строковое представление, то произойдет переполнение стека, поскольку для вывода значения c необходимо вывести значение c.

2
ответ дан 28 November 2019 в 21:03
поделиться

Структура данных с циклическим графом: http://en.wikipedia.org/wiki/Cycle_graph

1
ответ дан 28 November 2019 в 21:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: