создать сложную таблицу из данных JSON для нескольких элементов - PullRequest
1 голос
/ 19 апреля 2020

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

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

С помощью создайте сложную таблицу из Json данных , я могу создать массив, считающий каждого учителя и Я хочу добавить в него еще одну деталь. Я хочу рассчитать экземпляр сегмента для каждого учителя, как показано ниже

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

Ответы [ 2 ]

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

Одна опция использует от reduce до l oop через массив. Используйте teacher в качестве ключа для суммирования данных в объект. Используйте Object.values для преобразования объекта в массив.

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

const result = Object.values(data.reduce((c, {teacher,segment}) => {
  c[teacher] = c[teacher] || {"teacherName": teacher,"teacherCount": 0,"productCount": 0,"unrCount": 0};
  c[teacher].teacherCount++;

  if (segment === "product") c[teacher].productCount++;
  if (segment === "UNR") c[teacher].unrCount++;

  return c;
}, {}));

console.log(result);
1 голос
/ 19 апреля 2020

допустим, что d - ваш json, тогда этот код будет работать.

d.reduce((s, i)=>{
    teacher=i["teacher"]
    t=(s[teacher]==null)?{teacherCount:0}:s[teacher]
    seg=i['segment']
    t[seg]=(t[seg]==null)?1:(t[seg]+1)
    t["teacherCount"]+=1
    s[teacher]=t
    return s
},{})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...