Javascript 如何使用Ramda表达式将包含对象数组的数组转换为包含对象的单个数组?

Javascript 如何使用Ramda表达式将包含对象数组的数组转换为包含对象的单个数组?,javascript,arrays,mapping,ramda.js,flatten,Javascript,Arrays,Mapping,Ramda.js,Flatten,我有一个困难的时间,有一些坏的映射正在我的代码 我有一个包含如下对象数组的数组: [ [{a: 1, b: 2},{a: 1, b: 3} ], [{a: 5, b: 2},{a: 2, b: 5}] ] [ {a: 1, b: 2}, {a: 1, b: 3}, {a: 5, b: 2}, {a: 2, b: 5} ] 我想这样做: [ [{a: 1, b: 2},{a: 1, b: 3} ], [{a: 5, b: 2},{a: 2, b:

我有一个困难的时间,有一些坏的映射正在我的代码

我有一个包含如下对象数组的数组:

[
   [{a: 1, b: 2},{a: 1, b: 3} ],
   [{a: 5, b: 2},{a: 2, b: 5}]
]
[
   {a: 1, b: 2},
   {a: 1, b: 3},
   {a: 5, b: 2},
   {a: 2, b: 5}
]
我想这样做:

[
   [{a: 1, b: 2},{a: 1, b: 3} ],
   [{a: 5, b: 2},{a: 2, b: 5}]
]
[
   {a: 1, b: 2},
   {a: 1, b: 3},
   {a: 5, b: 2},
   {a: 2, b: 5}
]
为了做到这一点,我认为我找到了神奇的解决方案,让事情变得平坦,使用
flatte
函数,它不起作用(这个问题只是很多代码中的一段代码),我想知道为什么,我浪费了一些时间来发现这个问题,它不是我期望的behovior,如图中所示,首先,我得到的是一个包含两个对象的数组,使用
flatte
方法,我希望得到一个包含两个对象的数组,但我得到了您在图像中看到的结果:

我编写的代码如下:

const expectedArray = R.flatten(myArrayOfArraysOfObjects);
完整示例:

const singleTronconPoints = troncon => {
  return troncon.geometri_linestring;
};
console.log('troncons : ');
console.log(troncons);
console.log('map troncons points');
console.log(map(singleTronconPoints, troncons));
console.log('flatten');
console.log(flatten(map(singleTronconPoints, troncons)));
这就是全部结果:

我怎样才能解决这个问题,有没有另一种神奇的解决方法


任何帮助都将不胜感激。

您可以使用
array.flat

a=[
[{
答:1,,
b:2
}, {
答:1,,
b:3
}],
[{
a:5,
b:2
}, {
答:2,,
b:5
}]
];
设b=a.平坦();
log(b)
是您正在寻找的神奇解决方案

var-arr=[
[{a:1,b:2},{a:1,b:3}],
[{a:5,b:2},{a:2,b:5}]
]
console.log(arr.flat())
也可以是一个选项:

const arr =[
  [{a: 1, b: 2},{a: 1, b: 3}],
  [{a: 5, b: 2},{a: 2, b: 5}]
]

const expectedArray = arr.reduce((acc, array) => {
  acc.push(...array);
  return acc;
}, []);
使用+推哪个更快的方法

请参阅此以检查性能。

让arr=[
[{a:1,b:2},{a:1,b:3}],
[{a:5,b:2},{a:2,b:5}]
]
console.log(arr.flat())
让展平arr=arr.reduce((acc,val)=>(acc.push(…val),acc),[])

控制台日志(flattarr)请添加一个显示实际问题的,因为您的然后它一定不是平面方法的问题,它一定是其他的,因为ramda平面方法使用的是平面。这是否回答了您的问题
acc.push(…curr)
是curr.forEach(item=>acc.push(item))的简写形式
相反,reduce+push、flat()或reduce+concat会更好。你甚至可以更进一步的编码高尔夫:
arr.reduce((acc,array)=>(acc.push(…array),acc))
。顺便说一句,这不是我的反对票。@VijayPalaskar:你能分享一些相关的基准来支持这一说法吗?以防万一different@YevgenGorbunkov谢谢你的指点。这对我很有帮助。我已经更新了我的回答如果您关心性能,请不要使用spread运算符。这比flat&reduce+concat执行得更快。