首页 > 解决方案 > 我们如何使用 reduce 和 rest 运算符将以下数组转换为对象

问题描述

任何人都可以帮助我将以下数组转换为对象:

let data = [
  { name: "A", job: "soft", address: "ggn" },
  { name: "B", job: "software", address: "GGN" },
  { name: "C", job: "software", address: "GGN" },
];
Output:  {
“A”:{job: “software”, address: “GGN”},
“B”:{job: “software”, address: “GGN”},
“C”:{job: “software”, address: “GGN”}
};

在这里,我不想要名称及其对象的值。

我尝试使用以下解决方案:

const output = data.reduce((object, x) => {
    return { ...object, [x.name]: x };
}, {});

但我得到了不同的答案。有人可以通过提供最佳解决方案来提供帮助。我们可以使用 reduce 和 rest 运算符来解决它。

标签: javascriptarraysjavascript-objectsreduce

解决方案


您可以使用.map().reduce()组合Object.assign()如下:

let output = data.map(({name,...rest}) => ({[name]:rest}))
.reduce((acc,cur) => Object.assign(acc,cur),{});

演示

let data = [
{name: "A", job: "soft", address: "ggn"},
{name: "B", job: "software", address: "GGN"},
{name: "C", job: "software", address: "GGN"},
];

let output = data.map(({name,...rest}) => ({[name]:rest}))
    .reduce((acc,cur) => Object.assign(acc,cur),{});

console.log( output );

或者,您可以使用.map()and.reduce()如下:

let output = data.map(({name,...rest}) => ({[name]:rest}))
.reduce((acc,cur) => ({...acc,...cur}),{});

演示

let data = [
{name: "A", job: "soft", address: "ggn"},
{name: "B", job: "software", address: "GGN"},
{name: "C", job: "software", address: "GGN"},
];

let output = data.map(({name,...rest}) => ({[name]:rest}))
    .reduce((acc,cur) => ({...acc,...cur}),{});

console.log( output );

或者,如果您的对象没有太多属性:

let output = data.reduce((acc,cur) => ({...acc,...{[cur.name]: {job:cur.job,address:cur.address}}}),{});

演示

let data = [
{name: "A", job: "soft", address: "ggn"},
{name: "B", job: "software", address: "GGN"},
{name: "C", job: "software", address: "GGN"},
];

let output = data.reduce((acc,cur) => ({...acc,...{[cur.name]: {job:cur.job,address:cur.address}}}),{});

console.log( output );


推荐阅读