使用 rest/spread 语法将对象数组合并为单个对象

Using rest/spread syntax to merge an array of objects into a single object

这段代码按预期工作;但是,对于任何类型的输入都无法扩展:

const input = [{optionA: {a: 1}, optionB: {b: 1}, optionC: {c: 1}];
input.map(({optionA, optionB, optionC}) => {
    return Object.assign({}, optionA, optionB, optionC);
});

问题:如何重构我的地图参数和 Object.assign 参数,使其不使用解构而是使用 javascript 的展开语法,以确保在输入键未知时的输出名称及其长度?

如何满足这些测试用例?

    const input2 = [{optionZ: {z: 1}, optionY: {y: 1}, optionX: {x: 1}];
    const input3 = [{optionA: {a: 1}, optionB: {b: 1}, optionC: {c: 1},{optionZ: {z: 1}, optionY: {y: 1}, optionX: {x: 1}];

    input2.map(({optionA, optionB, optionC}) => {
        return Object.assign({}, optionA, optionB, optionC);
    });
    input3.map(({optionA, optionB, optionC}) => {
        return Object.assign({}, optionA, optionB, optionC);
    });

对象展开在这种情况下不起作用,因为结果将是一个具有属性的新对象,而不是您要合并的值的列表。

使用Object.values()获取属性的值,然后将它们与Object.assign():

合并

const fn = obj => Object.assign({}, ...Object.values(obj));

const input2 = [{"optionZ":{"z":1},"optionY":{"y":1},"optionX":{"x":1}}];
const input3 = [{"optionA":{"a":1},"optionB":{"b":1},"optionC":{"c":1}},{"optionZ":{"z":1},"optionY":{"y":1},"optionX":{"x":1}}];

console.log(input2.map(fn));
console.log(input3.map(fn));