使用 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));
这段代码按预期工作;但是,对于任何类型的输入都无法扩展:
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));