【问题标题】:How to change a format of an output?如何更改输出格式?
【发布时间】:2022-01-21 12:38:34
【问题描述】:

我的任务是过滤一组具有相同“matrikelnummer”属性的学生。我现在得到以下输出:

{
  4251: [
    {
      adresse: "900 Mitchell Trail",
      course: "Medientechnik",
      email: "mciccottio0@bandcamp.com",
      matrikelnummer: 4251,
      nachname: "Ciccottio",
      phone: "(533) 9776037",
      semester: 5,
      vorname: "Médiamass"
    }, {
      adresse: "7224 Tennessee Hill",
      course: "Medieninformatik",
      email: "sellingworth1@home.pl",
      matrikelnummer: 4251,
      nachname: "Ellingworth",
      phone: "(129) 5071723",
      semester: 4,
      vorname: "Tán"
    }, {
      adresse: "287 Daystar Park",
      course: "Informatik",
      email: "sreape2@ning.com",
      matrikelnummer: 4251,
      nachname: "Reape",
      phone: "(189) 8272285",
      semester: 12,
      vorname: "Gisèle"
    }
  ],
  4315: [
    {
      adresse: "4910 Rieder Hill",
      course: "Informatik",
      email: "jsizland4@hud.gov",
      matrikelnummer: 4315,
      nachname: "Sizland",
      phone: "(859) 3523116",
      semester: 2,
      vorname: "Méline"
    }
  ],
  4556: [
    {
      adresse: "17143 Monument Junction",
      course: "Wirtschaftsinformatik",
      email: "tkingsworth3@google.co.uk",
      matrikelnummer: 4556,
      nachname: "Kingsworth",
      phone: "(517) 1329873",
      semester: 8,
      vorname: "Styrbjörn"
    }
  ]
}

但我应该将其格式化为:


[
  {
    "matrikelnummer": 4250, 
    "students":[
      {
        "matrikelnummer":4250,
        "vorname":"Gérald", 
        "nachname":"Bayston", 
        "adresse":"3 Tony Street",
        "course":"Informatik", 
        "semester":5, 
        "email":"wbayston3x@cmu.edu",
        "phone":"(404) 3665176"
      }, 
      {
        "matrikelnummer":4250, 
        "vorname":"Wá",
        "nachname":"Chasney",
        "adresse":"919 Iowa Place",
        "course":"Wirtschaftsinformatik", 
        "semester":2,
        "email":"mchasneydd@nasa.gov", 
        "phone":"(510) 1079563"
      },
      {
        "matrikelnummer":4250, 
        "vorname":"Östen", 
        "nachname":"Heggman",
        "adresse":"8 Coleman Drive", 
        "course":"Medieninformatik",
        "semester":1, 
        "email":"kheggman9j@buzzfeed.com", 
        "phone":"(381)8246163"
      }, 
      {
        "matrikelnummer":4250, 
        "vorname":"Vérane", 
        "nachname":"Roubert", 
        "adresse":"463 Lakewood Avenue",
        "course":"Medientechnik", 
        "semester":5,
        "email":"aroubert7r@cornell.edu", 
        "phone":"(625) 8344564"
      }
    ]
  }
]

你知道我该如何解决这个问题吗?这是我当前的代码:

var students = [{"matrikelnummer":4251,"vorname":"Médiamass","nachname":"Ciccottio","adresse":"900 Mitchell Trail","course":"Medientechnik","semester":5,"email":"mciccottio0@bandcamp.com","phone":"(533) 9776037"},
{"matrikelnummer":4251,"vorname":"Tán","nachname":"Ellingworth","adresse":"7224 Tennessee Hill","course":"Medieninformatik","semester":4,"email":"sellingworth1@home.pl","phone":"(129) 5071723"},
{"matrikelnummer":4251,"vorname":"Gisèle","nachname":"Reape","adresse":"287 Daystar Park","course":"Informatik","semester":12,"email":"sreape2@ning.com","phone":"(189) 8272285"},
{"matrikelnummer":4556,"vorname":"Styrbjörn","nachname":"Kingsworth","adresse":"17143 Monument Junction","course":"Wirtschaftsinformatik","semester":8,"email":"tkingsworth3@google.co.uk","phone":"(517) 1329873"},
{"matrikelnummer":4315,"vorname":"Méline","nachname":"Sizland","adresse":"4910 Rieder Hill","course":"Informatik","semester":2,"email":"jsizland4@hud.gov","phone":"(859) 3523116"}]

const duplicateStudents = (students) => {
  const grouping = students.reduce((previous, current) => {
    if (previous[current.matrikelnummer]) previous[current.matrikelnummer].push(current);
    else previous[current.matrikelnummer] = [current];
    return previous;
  }, {});

  return grouping
};

【问题讨论】:

  • 是关于将格式A转换为格式B的问题吗?或者你真的需要过滤部分的帮助吗?我问这个是因为这两种格式非常相似,过滤格式 B 与格式 A 一样容易。

标签: javascript arrays object reduce


【解决方案1】:

这个概念很简单。您只需要遍历学生并检查具有相同matrikelnummber 的现有对象。如果是,推送到students 数组。否则,只需创建一个。使用 JavaScript 的 reduce 方法更好:

var students = [{
    "matrikelnummer": 4251,
    "vorname": "Médiamass",
    "nachname": "Ciccottio",
    "adresse": "900 Mitchell Trail",
    "course": "Medientechnik",
    "semester": 5,
    "email": "mciccottio0@bandcamp.com",
    "phone": "(533) 9776037"
  },
  {
    "matrikelnummer": 4251,
    "vorname": "Tán",
    "nachname": "Ellingworth",
    "adresse": "7224 Tennessee Hill",
    "course": "Medieninformatik",
    "semester": 4,
    "email": "sellingworth1@home.pl",
    "phone": "(129) 5071723"
  },
  {
    "matrikelnummer": 4251,
    "vorname": "Gisèle",
    "nachname": "Reape",
    "adresse": "287 Daystar Park",
    "course": "Informatik",
    "semester": 12,
    "email": "sreape2@ning.com",
    "phone": "(189) 8272285"
  },
  {
    "matrikelnummer": 4556,
    "vorname": "Styrbjörn",
    "nachname": "Kingsworth",
    "adresse": "17143 Monument Junction",
    "course": "Wirtschaftsinformatik",
    "semester": 8,
    "email": "tkingsworth3@google.co.uk",
    "phone": "(517) 1329873"
  },
  {
    "matrikelnummer": 4315,
    "vorname": "Méline",
    "nachname": "Sizland",
    "adresse": "4910 Rieder Hill",
    "course": "Informatik",
    "semester": 2,
    "email": "jsizland4@hud.gov",
    "phone": "(859) 3523116"
  }
]

let result = students.reduce((studentArray, student, index) => {
  let existingStudent = studentArray.find(studentIteration =>
    studentIteration.matrikelnummer === student.matrikelnummer
  );
  if (existingStudent) {
    existingStudent.students.push(student);
  } else {
    studentArray.push({
      matrikelnummer: student.matrikelnummer,
      students: [student]
    });
  }
  return studentArray;
}, []);

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多