展平嵌套的 JavaScript 对象

And*_*elt 4 javascript flatmap

我有一个嵌套对象,我想将其展平/映射为单层的、类似表格的对象。

[{
    a: 1,
    b: 2,
    c: [{
        x: 10,
        y: 20
    }, {
        x: 30,
        y: 40
    }]
}, {
    a: 3,
    b: 4,
    c: [{
        x: 50,
        y: 60
    }, {
        x: 70,
        y: 80
    }]
}]
Run Code Online (Sandbox Code Playgroud)

由此,我想得到这样的东西:

[{
    a: 1,
    b: 2,
    x: 10,
    y: 20
}, {
    a: 1,
    b: 2,
    x: 30,
    y: 40
}, {
    a: 3,
    b: 4,
    x: 50,
    y: 60
}, {
    a: 3,
    b: 4,
    x: 70,
    y: 80
}]
Run Code Online (Sandbox Code Playgroud)

当然,我可以简单地用两个 for 循环迭代对象,并将结果信息放在一个单独的数组中,但我想知道是否有更简单的解决方案。我已经尝试过使用flatMap. 如果我只想要c嵌套对象的一部分,但我不知道如何映射ab到该对象,它就可以工作。

由于你们中的一些人要求一些工作代码,这应该可以做到(未经测试):

let result = [];

for (const outer of myObj)
  for (const inner of outer.c)
    result.push({a: outer.a, b: outer.b, x: inner.x, y: inner.y});
Run Code Online (Sandbox Code Playgroud)

问题是,是否有一种实用的俏皮话,甚至另一种更好的方法。实际上,我的对象由四层组成,嵌套的 for 循环很快就会变得混乱。

Bil*_*qui 5

您可以在属性“c”上使用flatMap方法:map

var input = [{ a: 1, b: 2, c: [{ x: 10, y: 20 }, { x: 30, y: 40 }] }, { a: 3, b: 4, c: [{ x: 50, y: 60 }, { x: 70, y: 80 }] }];

const output = input.flatMap(obj =>
  obj.c.map(arr => ({a: obj.a, b: obj.b, x: arr.x, y: arr.y}))
);

console.log(output);
Run Code Online (Sandbox Code Playgroud)