создать сложную таблицу из данных Json - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть JSON, который выглядит следующим образом

[
{
    "teacher": "teacher1",
    "student": "student1"
    },
{
   "teacher": "teacher1",
    "student": "student1"
    },
{
    "teacher": "teacher1",
    "student": "student1"
    },
{
    "teacher": "teacher2",
    "student": "student1"
    },
{
   "teacher": "teacher2",
    "student": "student2"
    }
]

Я хочу преобразовать его так, чтобы он показывал мне счет каждого учителя, как это

[
    {
        "teacherName": "teacher1",
        "teacherCount": "3"
    },
    {
        "teacherName": "teacher2",
        "teacherCount": "2"
    },
]

Я работаю над проектом узла, где мне нужно напечатать эти данные в таблице.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Вы можете построить карту (используя .reduce()), которая индексируется / кодируется значением teacher. Значение, хранящееся у учителя, представляет собой количество раз, которое учитель видел в вашем массиве объектов. Затем вы можете использовать Array.from() с Map, построенным с использованием Reduce, чтобы получить каждую пару ключ-значение с карты (где ключ - имя учителя, а значение - значение учителя). Чтобы получить каждую пару ключ-значение, вы можете использовать функцию отображения Array.from () и сопоставить каждое значение ключа ([ключ, значение]) с таким объектом:

const data = [{ "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher1", "student": "student1" }, { "teacher": "teacher2", "student": "student1" }, { "teacher": "teacher2", "student": "student2" } ];

const res = Array.from(data.reduce((map, {teacher}) => {
  return map.set(teacher, (map.get(teacher) || 0) + 1);
}, new Map), ([teacherName, teacherCount]) => ({teacherName, teacherCount}));

console.log(res);
0 голосов
/ 17 апреля 2020

Вы можете собрать свои счета в уникальный набор, используя reduce, увеличивая учителя, если он существует, в противном случае инициируя его до 1. Затем следует пример того, как отформатировать, используя map.

let data = getData();

let teachers = data.reduce((acc, val) => {
  if (val.teacher in acc)
    acc[val.teacher]++;
  else
    acc[val.teacher] = 1;
  return acc;
}, {});

let formatted = Object.entries(teachers).map(
  ([teacherName, teacherCount]) => ({ teacherName, teacherCount })
);

console.log(formatted);


/*****************************************************************/
function getData() {
  return [{
      "teacher": "teacher1",
      "student": "student1"
    },
    {
      "teacher": "teacher1",
      "student": "student1"
    },
    {
      "teacher": "teacher1",
      "student": "student1"
    },
    {
      "teacher": "teacher2",
      "student": "student1"
    },
    {
      "teacher": "teacher2",
      "student": "student2"
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...