Как создать коллекцию предметов, ссылающуюся на саму коллекцию - PullRequest
1 голос
/ 02 мая 2019

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

Дано:

const sources = [1, 2, 3];

Ожидаемое:

const results = [{value:1, items:[{value: 1, items:[{value: 1, items...}, ...]}]}]

Сломан из-за того, что массивы копируются по значению в коде js:

const source = [1, 2, 3];
let result = [];

result = source.map(value => ({ value, items: result }));

Я пробовал несколько вещей в основном вокруг (()=> ...)(), но это ничего не дало. Мне удалось заставить его работать с элементами, являющимися функцией, а не значением, что не совсем то, что я хочу.

Вот лучшее решение, которое я нашел до сих пор:

Код:

const source = [1, 2, 3];
let items = [];

items = source.map(value => () => ({ value, items }));

Использование:

items[1]().items[1]().value // 2
items[1]().items[2]().items[0]().value // 1

Ответы [ 2 ]

1 голос
/ 02 мая 2019

Здесь применяются собственные ссылки в литералах / инициализаторах объекта . В вашем случае, геттеры были бы хорошим решением:

const result = [1, 2, 3].map(value => ({value, get items() { return result; }}));
0 голосов
/ 02 мая 2019

Это невозможно сделать за один шаг.Сначала вы должны создать массив объектов:

 const results = sources.map(value => ({ value }));

Затем выполнить обратную ссылку:

 results.forEach(result => result.items = results);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...