我正在寻找一种创建项目集合的方法,每个项目都将引用该集合本身。
给出:
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
答案 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);