如何创建引用集合本身的项目集合

时间:2019-05-02 09:55:56

标签: javascript ecmascript-6

我正在寻找一种创建项目集合的方法,每个项目都将引用该集合本身。

给出:

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 个答案:

答案 0 :(得分:1)

Self-references in object literals / initializers在这里适用。在您的情况下,吸气剂将是一个很好的解决方案:

const result = [1, 2, 3].map(value => ({value, get items() { return result; }}));

答案 1 :(得分:0)

这不可能一步完成。您必须先创建一个对象数组:

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

然后链接回来:

 results.forEach(result => result.items = results);