Javascript 在二维数组上循环并将数据提取到新数组
我有一个二维数组,如下所示:Javascript 在二维数组上循环并将数据提取到新数组,javascript,arrays,loops,multidimensional-array,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?
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?' },
]
我需要得到的结果是,只有一个数组应该是这样的:
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
的组合,而不创建两个独立的数组,如val1
和val2
,我假设外部数组中只有两个数组。您只需在第一个数组上循环,并从同一索引的其他数组中拾取文本,然后将它们合并到一个对象中
const bArray=
[['你好,世界',
“大家好”,
“你好吗?”
],
[{文本:“Hola Mundo”,
发件人:[],
原始:'},
{文本:'Hola todos',
发件人:[],
原始:'},
{文本:'Cómo estás?',
发件人:[],
原始:'},
]
];
让结果=bArray[0]。映射((项目,索引)=>{
返回{
恩:项目,,
es:bArray[1][index]。文本
};
});
控制台日志(结果)代码>我假设外部数组中只有两个数组。您只需在第一个数组上循环,并从同一索引的其他数组中拾取文本,然后将它们合并到一个对象中
const bArray=
[['你好,世界',
“大家好”,
“你好吗?”
],
[{文本:“Hola Mundo”,
发件人:[],
原始:'},
{文本:'Hola todos',
发件人:[],
原始:'},
{文本:'Cómo estás?',
发件人:[],
原始:'},
]
];
让结果=bArray[0]。映射((项目,索引)=>{
返回{
恩:项目,,
es:bArray[1][index]。文本
};
});
控制台日志(结果)代码>如果您只需执行以下操作:
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
索引。如果您只需执行以下操作:
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
索引。使用Array.prototype.forEach()方法的另一个变体
let result = [];
bArray[0].forEach((item, index) => {
result.push({
en: item,
es: bArray[1][index].text
});
});
console.log(result);
使用Array.prototype.forEach()方法的另一个变体
let result = [];
bArray[0].forEach((item, index) => {
result.push({
en: item,
es: bArray[1][index].text
});
});
console.log(result);
有趣的答案!是的,外部阵列中只有两个阵列。有趣的答案!是的,外部阵列中只有两个阵列。这一个太棒了!这正是我想要的。Sim meu amigo,vocêestácerto:)真是太棒了!当然,forEach
也可以;而不是map
,您不能返回此处,因此需要推入一个数组。容易理解。谢谢你的回答。当然,forEach
也可以;而不是map
,您不能返回此处,因此需要推入一个数组。容易理解。谢谢你的回答。