我们如何使用 reduce 和 rest 运算符将以下数组转换为对象
How can we convert below arrays into objects using reduce and rest operator
任何人都可以帮助我将以下数组转换为对象:
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 运算符来解决它。
你可以这样使用它:
let data = [
{ name: "A", job: "soft", address: "ggn" },
{ name: "B", job: "software", address: "GGN" },
{ name: "C", job: "software", address: "GGN" },
];
const output = data.reduce((acc, curr) => {
const { name, ...rest } = curr;
acc[name] = rest
return acc;
}, {});
或:
const output = data.reduce((acc, curr) => {
const { name, ...rest } = curr;
return { ...acc, [name]: rest };
}, {});
你可以这样做
let data = [{
name: "A",
job: "soft",
address: "ggn"
},
{
name: "B",
job: "software",
address: "GGN"
},
{
name: "C",
job: "software",
address: "GGN"
},
];
const output = data.reduce((object, x) => {
const {
name,
job,
address
} = x;
object[name] = {
job,
address
}
return object;
}, {});
console.log(output)
首先你需要改变双引号,它们不是标准的双引号
您可以使用 map 方法
以更短的代码编写它
let data = [
{name: "A", job: "soft", address: "ggn"},
{name: "B", job: "software", address: "GGN"},
{name: "C", job: "software", address: "GGN"},
];
const toto = data.map ( element => {
const name = element.name
delete element.name
return {[name] : element}})
console.log(toto)
查看地图方法以了解更多信息:https://learnjsx.com/category/2/posts/es6-mapFunction
let data = [
{name: 'A', job: 'soft', address: 'ggn'},
{name: 'B', job: 'software', address: 'GGN'},
{name: 'C', job: 'software', address: 'GGN'},
];
const output = {};
const obj = data.reduce((acc, el) => {
const { name, job, address } = el;
return { ...acc, [name]: { job, address} };
}, output);
console.log(obj);
您可以将 .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()
和 .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 );
此处不需要reduce
。
Object.fromEntries()
来拯救 - 你可以使用 .map
和解构将对象映射到一对数组中,fromEntries
可以变成一个普通对象:
> let data = [
{ name: "A", job: "soft", address: "ggn" },
{ name: "B", job: "software", address: "GGN" },
{ name: "C", job: "software", address: "GGN" },
];
> Object.fromEntries(data.map(({name, ...rest}) => [name, rest]));
{
A: {job: 'soft', address: 'ggn'}
B: {job: 'software', address: 'GGN'},
C: {job: 'software', address: 'GGN'}
}
最简单的方法是先解构对象,这样就可以把名字分开了。然后你可以用累加器 return 它们。
const data = [
{ name: "A", job: "software", address: "GGN" },
{ name: "B", job: "software", address: "GGN" },
{ name: "C", job: "software", address: "GGN" },
];
const output = data.reduce((acc, item) => {
const { name, ...rest } = item;
return {
...acc,
[name]: rest,
}
}, {})
console.log(output)
任何人都可以帮助我将以下数组转换为对象:
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 运算符来解决它。
你可以这样使用它:
let data = [
{ name: "A", job: "soft", address: "ggn" },
{ name: "B", job: "software", address: "GGN" },
{ name: "C", job: "software", address: "GGN" },
];
const output = data.reduce((acc, curr) => {
const { name, ...rest } = curr;
acc[name] = rest
return acc;
}, {});
或:
const output = data.reduce((acc, curr) => {
const { name, ...rest } = curr;
return { ...acc, [name]: rest };
}, {});
你可以这样做
let data = [{
name: "A",
job: "soft",
address: "ggn"
},
{
name: "B",
job: "software",
address: "GGN"
},
{
name: "C",
job: "software",
address: "GGN"
},
];
const output = data.reduce((object, x) => {
const {
name,
job,
address
} = x;
object[name] = {
job,
address
}
return object;
}, {});
console.log(output)
首先你需要改变双引号,它们不是标准的双引号 您可以使用 map 方法
以更短的代码编写它let data = [
{name: "A", job: "soft", address: "ggn"},
{name: "B", job: "software", address: "GGN"},
{name: "C", job: "software", address: "GGN"},
];
const toto = data.map ( element => {
const name = element.name
delete element.name
return {[name] : element}})
console.log(toto)
查看地图方法以了解更多信息:https://learnjsx.com/category/2/posts/es6-mapFunction
let data = [
{name: 'A', job: 'soft', address: 'ggn'},
{name: 'B', job: 'software', address: 'GGN'},
{name: 'C', job: 'software', address: 'GGN'},
];
const output = {};
const obj = data.reduce((acc, el) => {
const { name, job, address } = el;
return { ...acc, [name]: { job, address} };
}, output);
console.log(obj);
您可以将 .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()
和 .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 );
此处不需要reduce
。
Object.fromEntries()
来拯救 - 你可以使用 .map
和解构将对象映射到一对数组中,fromEntries
可以变成一个普通对象:
> let data = [
{ name: "A", job: "soft", address: "ggn" },
{ name: "B", job: "software", address: "GGN" },
{ name: "C", job: "software", address: "GGN" },
];
> Object.fromEntries(data.map(({name, ...rest}) => [name, rest]));
{
A: {job: 'soft', address: 'ggn'}
B: {job: 'software', address: 'GGN'},
C: {job: 'software', address: 'GGN'}
}
最简单的方法是先解构对象,这样就可以把名字分开了。然后你可以用累加器 return 它们。
const data = [
{ name: "A", job: "software", address: "GGN" },
{ name: "B", job: "software", address: "GGN" },
{ name: "C", job: "software", address: "GGN" },
];
const output = data.reduce((acc, item) => {
const { name, ...rest } = item;
return {
...acc,
[name]: rest,
}
}, {})
console.log(output)