javascript - 将多个数组中的值存储到一个数组中(JavaScript/Reactjs)

标签 javascript arrays reactjs loops

我有一个数组,它的值是数组。我需要的是具有所有数组值的输出。

注意:输入数组及其元素(数组)不是固定长度的。

输入:

array = 
[ 
  [a,b],
  [c,d,e],
  [f,g]
]

输出:

[
 {
  Header : a
  Children : 
  [
   {
    Header : c
    Children : 
     [
      Header : f
     ]
   },
  ]
 },
 {
  Header : a
  Children : 
  [
   {
    Header : c
    Children : 
     [
      Header : g
     ]
   },
  ]
 },
 {
  Header : a
  Children : 
  [
   {
    Header : d
    Children : 
     [
      Header : f
     ]
   },
  ]
 },
.
.
.
{
  Header : a
  Children : 
  [
   {
    Header : e
    Children : 
     [
      Header : g
     ]
   },
  ]
 },
 {
  Header : b
  Children : 
  [
   {
    Header : c
    Children : 
     [
      Header : f
     ]
   },
  ]
 },
 .
 .
 .
 .
 .
 {
  Header : b
  Children : 
  [
   {
    Header : e
    Children : 
     [
      Header : g
     ]
   },
  ]
 },
]

基本上就像,

[a,c,f],
[a,c,g],
[a,d,f],
[a,d,g],
[a,e,f],
[a,e,g],
[b,c,f],
[b,c,g],
[b,d,f],
[b,d,g],
[b,e,f],
[b,e,g]

我尝试过使用 for 循环,但无法获得所需的输出。 有什么方法可以实现这个结果吗?

最佳答案

您可以创建 Cartesian product首先是二维数组。然后,使用 reduceRight为笛卡尔积中的每个数组创建一个嵌套对象

const data = [
  ["a", "b"],
  ["c", "d", "e"],
  ["f", "g"]
]

const cartesian = data.reduce((acc, curr) =>
  acc.flatMap(c => curr.map(n => [].concat(c, n)))
)

const tree = arr => arr.reduceRight((acc, Header) =>
    acc ? ({ Header, Children: [acc] }) : ({ Header })
, null)

const output = cartesian.map(tree)

console.log(JSON.stringify(cartesian))
console.log(output)

关于javascript - 将多个数组中的值存储到一个数组中(JavaScript/Reactjs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400283/

相关文章:

javascript - 具有 1000 万个项目的两个数组的差异 - _.difference 太慢了

Javascript索引

javascript - 快速查找网页中事件背后的 JS 和 jQuery 代码和函数

javascript - 如果数组包含特定键扩展数组中的对象,否则将对象插入数组

java - 从学生详细信息如何使用唯一的卷号调用和显示存储在数组中的特定详细信息

javascript - 样式化组件 – 从父级访问 props

javascript - 月份中的天数函数只能使用一次

python - 选择numpy数组不同行的不同列的元素

reactjs - React Navigation "focus"事件监听器不使用更新值

javascript - 无法在 componentDidMount 内设置状态