我有一个二维数组,如下所示:
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
。< / p>
答案 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);