javascript - 展平数组,但使用子数组作为基础

标签 javascript arrays lodash transformation ramda.js

我们正在尝试采用具有以下格式的数组:

[
{batchId: 123, files: [{fileName: 'fileA.txt'}, {fileName: 'fileB.txt'}],
{batchId: 456, files: [{fileName: 'fileC.txt'}, {fileName: 'fileD.txt'}],
]

并将其展平,表示为:

[
{batchId: 123, fileName: 'fileA.txt'},
{batchId: 123, fileName: 'fileB.txt'},
{batchId: 456, fileName: 'fileC.txt'},
{batchId: 456, fileName: 'fileD.txt'},
]

我们希望有一种更优雅的方法来使用预先存在的库(例如 Ramda 或 Lodash)转换此数据,但是任何 javascript 实现都可以。

最佳答案

您可以使用 reduce()map() 方法并返回新数组。

const data = [
{batchId: 123, files: [{fileName: 'fileA.txt'}, {fileName: 'fileB.txt'}]},
{batchId: 456, files: [{fileName: 'fileC.txt'}, {fileName: 'fileD.txt'}]},
]

const result = data.reduce((r, e) => {
  r.push(...e.files.map(o => Object.assign({}, o, {batchId: e.batchId})))
  return r;
}, [])

console.log(result)

关于javascript - 展平数组,但使用子数组作为基础,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49861298/

相关文章:

javascript - 在 javascript 函数中使用类似 Haskell 的函数式累加器

javascript - 如果 child 有类(class),则选择 child 的 parent

javascript - 如何根据样式值选择元素?

javascript - 自定义控件 Openlayers 3 上的平滑缩放

javascript - 防止使用 Observable Angular 2 时插入重复项

php数组,将日期设置为键然后合并相同的日期?

javascript - 查找嵌套 json 对象深处的对象

javascript - 当屏幕尺寸为 medium 或 small 或 xs 时,文本溢出会弄乱整个表格。它在全屏下工作正常

r - 具有不同维度的数组乘法以在 R 中制作概率表

javascript - 在 JavaScript 中通过 sibling 链接对象