簡體   English   中英

使用 Javascript ES6 修改對象列表

[英]Modify list of objects using Javascript ES6

我有下面的對象數組,其中vertical作為字符串, projects作為其中的對象數組。 projects也可以是空的。 每個projects條目如果不為空,則將具有namereleaseType作為屬性。

[
  {
    "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;
}, []);

演示: https://jsfiddle.net/6zk8jhat/

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM