如何在 JavaScript 中使用 reduce 函数?我对使用它有点困惑

How to work with reduce function in JavaScript? I'm bit confused in using it

我在使用 reduce 函数时有点困惑我有一个数组

let aa = [1,2,3,4,5,6]

我需要的输出是:

[{id:1,children:
   [{id:2,children:
        [{id:3,children:
          [{id:4,children:
            [{id:5,children:
              [{id:6,children:[{}]}]
            }]
          }]
        }]
   }]
}]

我写了一个函数

let aa = [1,2,3,4,5,6]
let cc = aa.reduce((acc, val) => {
  let obj = {
    id: val,
    children: []
  }
  acc.push(obj);
  console.log(acc[0].children)
  acc = acc[0].children
  return acc
}, [])
console.log(cc);

执行后我得到空数组但是在查看第 7 行控制台时我得到一些类似的东西

请有人帮助我了解我犯了什么错误。

我们可以在 javascript

中使用 Map() 制作这棵树吗

在调用 .reduce 之前,您需要保存对 初始 外部数组的引用。然后,在调用.reduce并传入初始值后,它会构造递归结构,然后你可以return初始值return整个结构:

const aa = [1, 2, 3, 4, 5, 6]
const result = [];
aa.reduce((acc, val) => {
  acc[0] = {
    id: val,
    children: [{}]
  };
  return acc[0].children;
}, result);

console.log(result);

另一个不将结果保存到外部数组的选项是使用 reduceRight 从内部构造它:

const aa = [1, 2, 3, 4, 5, 6]
const result = aa.reduceRight((children, val) => ([{
  id: val,
  children
}]), [{}]);
console.log(result);

你可以结合JS数组反转和reduce方法得到如下结果

let aa = [1, 2, 3, 4, 5, 6]
let result = aa.reverse().reduce((children, id) => [{ id, children }], [{}]);

console.log(result)