【问题标题】:Store values from multiple arrays into one array (JavaScript/Reactjs)将多个数组中的值存储到一个数组中(JavaScript/Reactjs)
【发布时间】:2019-10-15 18:00:13
【问题描述】:

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

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

输入

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 循环,但无法获得所需的输出。 有什么方法可以达到这个效果吗?

【问题讨论】:

  • Stack Overflow 不是代码编写服务。请提供minimal reproducible example 说明您尝试过的方法以及遇到的问题。
  • @EmileBergeron 我明白了你的意思,但是我尝试过的那些 for 循环现在可以正常工作了。
  • 您可以使用此Cartesian product of multiple arrays in JavaScript 获得第二个输出。然后你可以遍历输出数组并使用递归为每个内部数组创建一个嵌套对象
  • 另外,问题描述中的输入与输出似乎不匹配,或者背后的逻辑不清楚,这使得它很难提供帮助。

标签: javascript arrays reactjs loops


【解决方案1】:

您可以先创建一个二维数组的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)

【讨论】:

    【解决方案2】:
    function join(arrayOfArrays) {
        let current = [[]];
        for (let array of arrayOfArrays) {
            current = current.flatMap(c=>array.map(a=>[...c, a]));
        }
        return current;
    }
    

    【讨论】:

    • 谢谢@mateusz。我尝试了上面解释的笛卡尔方式。效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2016-03-12
    • 2014-07-26
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多