代码之家  ›  专栏  ›  技术社区  ›  robe007 Leo Aguirre

循环遍历二维数组并将数据提取到新数组中

  •  1
  • robe007 Leo Aguirre  · 技术社区  · 7 年前

    我有一个 二维数组 这样地:

    const bArray = 
    [ [ 'Hello World',
        'Hi everybody',
        'How are you?'
      ],
      [ { text: 'Hola Mundo',
          from: [Object],
          raw: '' },
        { text: 'Hola a todos',
          from: [Object],
          raw: '' },
        { text: 'Cómo estás?',
          from: [Object],
          raw: '' },
      ]
    ]
    

    因此,我只需要得到一个这样的数组:

    [
     { en: 'Hello World',
       es: 'Hola Mundo' },
    
     { en: 'Hi everybody',
       es: 'Hola a todos' },
    
     { en: 'How are you?',
       es: 'Cómo estás?' },
    ]
    

    我就是这样做的:

    let val1 = bArray[0].map(tuple => tuple);
    let val2 = bArray[1].map(tuple => tuple);
    
    let result = val1.reduce((arr, v, i) => arr.concat({"en" : v, "es" : val2[i].text}), []);
    

    现在在 result 变量,我只有一个数组,结果显示在前面。


    我的问题?

    有没有什么改进的方法可以让我得到相同的结果,但代码行更少?我是说,有点像 map 具有 reduce , filter concat 没有创建两个separte数组 val1 val2 .

    3 回复  |  直到 7 年前
        1
  •  2
  •   CrociDB    7 年前

    如果你只是这样做:

    bArray[0].reduce((arr, v, i) => arr.concat({"en" : v, "es" : bArray[1][i].text}), []);
    

    你只需要一行就可以得到同样的东西。

    说明:

    let val1 = bArray[0].map(tuple => tuple);
    let val2 = bArray[1].map(tuple => tuple);
    

    这只是获取数组中的元素。它与以下内容完全相同:

    let val1 = bArray[0];
    let val2 = bArray[1];
    

    所以我直接访问了 bArray 原始行中的索引。

        2
  •  2
  •   Zohaib Ijaz    7 年前

    我假设外部数组中只有两个数组。您只需在第一个数组上循环,并在同一索引处从其他数组中选择文本,然后将它们合并到一个对象中。

    const bArray = 
    [ [ 'Hello World',
        'Hi everybody',
        'How are you?'
      ],
      [ { text: 'Hola Mundo',
          from: [],
          raw: '' },
        { text: 'Hola a todos',
          from: [],
          raw: '' },
        { text: 'Cómo estás?',
          from: [],
          raw: '' },
      ]
    ];
    
    let result = bArray[0].map((item, index) => {
       return {
         en: item,
         es: bArray[1][index].text
       };
    });
    
    console.log(result);
        3
  •  1
  •   Isaac    7 年前

    还有另一种变体使用 Array.prototype.forEach() 方法

    let result = [];
    bArray[0].forEach((item, index) => {
       result.push({
         en: item,
           es: bArray[1][index].text
       });
    });
    
    console.log(result);