簡體   English   中英

將對象數組復雜轉換為另一個數組

[英]Complex transformation of an array of objects into another array

我有一個對象數組,每個 object 是一個帶有名稱和問題數組的字段,我怎樣才能將這個結構帶入一個對象數組,其中 object 將是問題,如果已經問過這樣的問題,不應重復。

  let object = [
      {name: 'first', questions: [
        {name: 'question1', answer: {name: 'answer1'}},
       {name: 'question2', answer: {name: 'answer2'}}
      ]},
       {name: 'second', questions: [
        {name: 'question3', answer: {name: 'answer3'}},
        {name: 'question1', answer: {name: 'answer1'}}
      ]}
    ]

  //exprected => 

let result = [
  {qeustion: 'qeustion1', answer: {name: 'answer1'}},
  {qeustion: 'qeustion2', answer: {name: 'answer2'}},
  {name: 'question3', answer: {name: 'answer3'}}
]

我堅持以下轉換,我嘗試用 reduce 來做,但沒有任何效果

首先,使用reduce是一種很好的方法,但reduce不會給你想要的最終結果。

您還需要遍歷問題數組並檢查當前問題是否已添加到結果數組中(您沒有提到如何檢查問題是否重復,所以假設應該檢查問題的名稱)。 如果問題不是重復的,則將其推送到結果數組。

這是一個演示:

 let object = [ { name: "first", questions: [ { name: "question1", answer: { name: "answer1" } }, { name: "question2", answer: { name: "answer2" } } ] }, { name: "second", questions: [ { name: "question3", answer: { name: "answer3" } }, { name: "question1", answer: { name: "answer1" } } ] } ]; let transform = arr => arr.reduce((a, c) => { c.questions.forEach( q => 0 > a.findIndex(el => el.question == q.name) && a.push({ question: q.name, answer: q.answer }) ); return a; }, []); console.log(transform(object));

希望對您有所幫助,如果您仍然需要任何進一步的幫助,請隨時詢問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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