【问题标题】:How to work with reduce function in JavaScript? I'm bit confused in using it如何在 JavaScript 中使用 reduce 函数?我在使用它时有点困惑
【发布时间】:2020-05-16 20:11:37
【问题描述】:

我在使用 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() 制作这棵树吗

【问题讨论】:

  • 不能用forEach数组方法吗?

标签: javascript reduce


【解决方案1】:

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

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);

【讨论】:

  • 非常感谢兄弟重播速度有多快
  • aa.reduceRight((acc, e)=> [{id:e, children: acc}], [{}]); // 以[{}]开始
【解决方案2】:

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

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

console.log(result)

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多