javascript - 我们如何使用 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 运算符来解决它。
解决方案
您可以使用.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 );
推荐阅读
- objective-c - 错误:(-215:Assertion failed) !_src.empty() in function 'cvtColor' 同时使用 OpenCV 4.2 和 swift
- aws-lambda - aws api gateway 抛出错误 Cannot GET /patients
- javascript - 通过 ajax 在 Html 中使用来自 Django 的 JsonResponse 变量
- react-native - 如何在反应原生快照轮播中使用视频?也许另一个更好的旋转木马包来反应原生?
- c# - 搜索不在href标签中的给定单词或单词对
- android - 如何在 Volley JSONObject 请求 Android 中检查状态代码 204(无内容)
- mongoose - 如何在打字稿环境中使用 mongoose.Schema.pre()?
- java - 当我点击两个重叠的图像视图时,其中一个给我反馈,另一个没有
- google-cloud-data-fusion - Cloud Datafusion 中的 SPARK 加入策略
- cloud - RHV 和 OpenStack 有什么区别