循环使用二维数组并将数据提取到新数组

时间:2018-05-23 22:13:17

标签: javascript arrays loops multidimensional-array

我有一个二维数组,如下所示:

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变量中,我只有一个数组,其结果显示在之前。

我的问题?

是否有任何改进的方法可以获得相同的结果,但代码行数较少?我的意思是,类似于mapreducefilterconcat的组合而不创建两个separte数组,如val1val2。< / p>

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

如果您只是这样做:

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 :(得分:1)

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

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

console.log(result);