Я хочу подсчитать количество времени, когда статистика верна, и подсчитать количество дат, повторяющихся по уникальным идентификаторам - PullRequest
0 голосов
/ 09 мая 2020

с использованием id необходимо создать счетчик для stat и ttrf и создать новые данные с именем, id, числом stat и числом ttrf, повторенных для уникального идентификатора

data = [
0: {id: "51a", name: "Henry", team: "SPP", stat: "true", ttrf: "05/08/2020"}
1: {id: "5ea", name: "James", team: "BOPS", stat: "true", ttrf: "05/08/2020"}
2: {id: "51a", name: "Henry", team: "SPP", stat: "false", ttrf: "05/08/2020"}
3: {id: "5ea", name: "James", team: "BOPS", stat: "true", ttrf: "05/08/2020"}]

Полученный результат :

data = [
0: {id: "51a", name: "Henry", team: "SPP", stat: 1, ttrf: 2}
1: {id: "5ea", name: "James", team: "BOPS", stat: 2, ttrf: 2}]

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

Здесь я использовал метод reduce для решения этой проблемы. Вы можете проверить это решение.

const data = [
  { id: "51a", name: "Henry", team: "SPP", stat: "true", ttrf: "05/08/2020" },
  { id: "5ea", name: "James", team: "BOPS", stat: "true", ttrf: "05/08/2020" },
  { id: "51a", name: "Henry", team: "SPP", stat: "false", ttrf: "05/08/2020" },
  { id: "5ea", name: "James", team: "BOPS", stat: "true", ttrf: "05/08/2020" },
];

const newData = data.reduce((store, obj) => {
  const statVal = obj.stat === "true" ? 1 : 0;
  const ttrfVal = obj.ttrf ? 1 : 0;
  if (!store[obj.id]) {
    store[obj.id] = obj;
    obj.ttrfDates = new Set();
    obj.ttrfDates.add(obj.ttrf);
    store[obj.id].ttrf = ttrfVal;
    store[obj.id].stat = statVal;
  } else {
    if (!(obj.stat === "true" && store[obj.id].ttrfDates.has(obj.ttrf))) {
      store[obj.id].ttrf++;
    }
    store[obj.id].stat += statVal;
  }
  return store;
}, {});

const modifiedData = Object.values(newData).filter(
  (data) => data.ttrfDates && delete data.ttrfDates
);

console.log(modifiedData);
0 голосов
/ 09 мая 2020

Добро пожаловать в SO! Чтобы получить то, что вы хотите, вам просто нужно создать функцию уменьшения . Вот пример:

data = [
{id: "51a", name: "Henry", team: "SPP", stat: "true", ttrf: "05/08/2020"}
{id: "5ea", name: "James", team: "BOPS", stat: "true", ttrf: "05/08/2020"}
{id: "51a", name: "Henry", team: "SPP", stat: "false", ttrf: "05/08/2020"}
{id: "5ea", name: "James", team: "BOPS", stat: "true", ttrf: "05/08/2020"}]

const formatted = data.reduce((acc, item) => {
  if (!acc[item.id]) {
    acc[item.id] = { 
      id: item.id,
      name: item.name,
      team: item.team,
      stat: 0,
      origianlTtrf: item.ttrf,
      ttrf: 1
    };
  }

  if (item.stat) {
    acc[item.id].stat++;
  } 

  if (item.ttrf !== acc[item.id].originalTtrf) {
    acc[item.id].ttrf++;
  }

  return acc;
}, {});

Object.values(formatted); // the data you want in an array
...