[英]Modify list of objects using Javascript ES6
我有下面的對象數組,其中vertical
作為字符串, projects
作為其中的對象數組。 projects
也可以是空的。 每個projects
條目如果不為空,則將具有name
和releaseType
作為屬性。
[
{
"vertical": "Alpha",
"projects": [
{
"name": "Test",
"releaseType": ""
}
]
},
{
"vertical": "Beta",
"projects": []
},
{
"vertical": "Gamma",
"projects": [
{
"name": "Lincoln",
"releaseType": "Google Pay"
},
{
"name": "Madison",
"releaseType": "PayPal"
}
]
}
]
我想獲取以下格式的項目列表。 有人可以讓我知道如何實現這一目標。 這不是常規的過濾方法,但需要使用 map 進行一些操作。 我嘗試了一些東西,但我無法達到預期的結果。
[
{
"vertical": "Alpha",
"feature": "Test",
"releaseType": ""
},
{
"vertical": "Gamma",
"feature": "Lincoln",
"releaseType": "Google Pay"
},
{
"vertical": "Gamma",
"feature": "Madison",
"releaseType": "PayPal"
}
]
您可以使用reduce
來解決它
arr.reduce((pre, cur) => {
if (cur.projects.length) {
pre.push(...cur.projects.map(p => ({
vertical: cur.vertical,
feature: p.name,
releaseType: p.releaseType,
})))
}
return pre;
}, []);
您可以為此使用Array.reduce
let formattedProjects = arr.reduce((p, c, i, a) => {
if (c.projects.length) {
p = p.concat(c.projects.map(project => {
return {
vertical: c.vertical,
feature: project.name,
releaseType: project.releaseType
}
}));
}
return p;
}, []);
Double flatMap ,應該很好地解決這個問題:
const input = [{vertical:"Alpha",projects:[{name:"Test",releaseType:""}]},{vertical:"Beta",projects:[]},{vertical:"Gamma",projects:[{name:"Lincoln",releaseType:"Google Pay"},{name:"Madison",releaseType:"PayPal"}]}]; const res = input.flatMap(e => e.projects.flatMap(x => [{vertical: e.vertical, ...x}]) ) console.log(res)
.as-console-wrapper { max-height: 100%;important: top; 0; } /* ignore this */
let arr = [
{
vertical: "Alpha",
projects: [
{
name: "Test",
releaseType: "",
},
],
},
{
vertical: "Beta",
projects: [],
},
{
vertical: "Gamma",
projects: [
{
name: "Lincoln",
releaseType: "Google Pay",
},
{
name: "Madison",
releaseType: "PayPal",
},
],
},
];
arr = arr
.map((obj) => {
return obj.projects.map((proj) => {
return {
vertical: obj.vertical,
...proj,
};
});
})
.flat();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.