Как подсчитать количество элементов в каждый день в течение месяца из данных json с помощью javascript

Я хочу написать программу для вычисления суммы некоторых переменных за один день для всех данных, представленных в ответе json из базы данных mysql, с помощью вызовов ajax.

В этих данных я хочу получить доступ к

  • дата-время,
  • Проверено цилиндров,
  • ProdRate

переменными таким образом, что на дату 2021-05-30 сумма проверенных цилиндров будет равна 9, а prodRate будет средним значением проверенных продтов и цилиндров.

Например

  • Дата 1 = 31.05.2021 => CyinderChecked = 1;
    (сумма всех проверенных баллонов за один день)

  • ProdRate = 1/1 = 1;
    (Сумма продрата за один день, деленная на количество проверенных баллонов за один день.

  • Дата 2 = 30.05.2021 => CylinderChecked = 9;
    (сумма всех проверенных баллонов за один день)

  • ProdRate = 6/9 = 0,67;
    (Сумма продрата за один день, деленная на количество проверенных баллонов за один день.

let data = [{
    "0": "2021-05-31 09:10:27",
    "1": "1",
    "2": "1",
    "Date": "2021-05-31 09:10:27",
    "ProdRate": "1",
    "CheckedCylinders": "1"
  },
  {
    "0": "2021-05-30 22:03:32",
    "1": "1",
    "2": "4",
    "Date": "2021-05-30 22:03:32",
    "ProdRate": "1",
    "CheckedCylinders": "4"
  },
  {
    "0": "2021-05-30 18:41:34",
    "1": "1",
    "2": "9",
    "Date": "2021-05-30 18:41:34",
    "ProdRate": "1",
    "CheckedCylinders": "9"
  },
  {
    "0": "2021-05-30 18:32:28",
    "1": "1",
    "2": "8",
    "Date": "2021-05-30 18:32:28",
    "ProdRate": "1",
    "CheckedCylinders": "8"
  },
  {
    "0": "2021-05-30 09:20:19",
    "1": "1",
    "2": "8",
    "Date": "2021-05-30 09:20:19",
    "ProdRate": "1",
    "CheckedCylinders": "8"
  }
]

function report(result, dates) {
  var totalCy = [],
    prodRate = [],
    sum1 = 0,
    sum2 = 0;

  for (let x in result) {
    totalCy.push(parseInt(result[x].CheckedCylinders));
    prodRate.push(parseInt(result[x].ProdRate));
  }
  for (x in totalCy && prodRate) {
    sum1 = sum1 + totalCy[x];
    sum2 = sum2 + prodRate[x];
  }

  sum2 = sum2 / sum1;
  for (var x in dates) {
    $(".degassingReportbody").append(`
        <tr>
        <td>${dates[x]}</td>
        <td>${sum1}</td>
        <td>${sum2}</td>
        </tr>
        `);
  }
}

function degassingReport(data) {
  //DATE & TIME Total Cyl Checked   Production Rate

  $(".degassingReportHead").append(`
        <tr>
        <th>DATE & TIME</th>
        <th>Total Cyl Checked</th>
        <th>Production Rate</th>
        </tr>
        `);
  let date = [];
  for (let x in data) {
    date.push(data[x].Date.split(" ")[0]);
  }
  let newDate = new Set(date);
  let dates = [...newDate];

  for (var x in dates) {
    result = data.filter(function(obj) {
      return obj.Date.split(" ")[0] == dates[x];
    });
  }
  report(result, dates);
}

degassingReport(data)
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table>
  <thead class = "degassingReportHead"></thead>
  <tbody class = "degassingReportbody"></tbody>
</table>

Ваши данные неверны. Вам нужны уникальные идентификаторы и запятые между ними. Кажется, у вас есть массив объектов, но ваше представление недействительно JSON / Object notation

mplungjan 04.04.2021 10:58

Вы говорите о данных JSON? Поскольку я скопировал их из инструмента разработчика Chrome, позвольте мне отредактировать их

SAAGAR JHA 04.04.2021 11:08

Да, пожалуйста, не используйте версию инструмента разработчика

mplungjan 04.04.2021 11:09

ваш образец не соответствует вашим данным json

Frenchy 04.04.2021 11:31

Я отредактировал данные JSON. @Frenchy мой пример кода получает данные из вызова ajax.

SAAGAR JHA 04.04.2021 11:33

гул для вашего второго свидания, как вы находите 9 для цилиндра, сумма 4 +9 +8 +8?

Frenchy 04.04.2021 11:36

Я обновил фрагмент (мы используем фрагменты для отображения исполняемого кода) с соответствующим HTML

mplungjan 04.04.2021 12:05

Так много вещей не работают, я даже не могу их все сделать. Например: let dates = new Set(); data.forEach(({Date}) => dates.add(Date.split(" ")[0]));, почему вы обрабатываете даты снова и снова?

mplungjan 04.04.2021 12:16

Почему вы показываете одни и те же суммы в каждой строке отчета?

mplungjan 04.04.2021 12:17

Скорее всего, это не то, что вы думаете. for (x in totalCy && prodRate) {. Вы не можете выполнить for in с двумя итерациями в одном операторе.

mplungjan 04.04.2021 12:18

@mplungjan благодарит за обновление фрагмента. Спасибо за помощь. На самом деле то, что я делаю, я собираюсь через данные json, беря все даты, помещая их в новый массив, который затем я повторяю с этими данными и сравниваю их с чем-то, если они есть, тогда я сохраняю эти данные в новом объекте результата, вычисляющем проверку цилиндра и норму продукта

SAAGAR JHA 04.04.2021 12:24

@Frenchy раньше у меня было 3 данных в элементе JSON, я добавил еще 2, поэтому теперь расчет будет отличаться в зависимости от дат

SAAGAR JHA 04.04.2021 13:05
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
12
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

решение с использованием reduce:

let data = [{
    "0": "2021-05-31 09:10:27",
    "1": "1",
    "2": "1",
    "Date": "2021-05-31 09:10:27",
    "ProdRate": "1",
    "CheckedCylinders": "1"
  },
  {
    "0": "2021-05-30 22:03:32",
    "1": "1",
    "2": "4",
    "Date": "2021-05-30 22:03:32",
    "ProdRate": "1",
    "CheckedCylinders": "4"
  },
  {
    "0": "2021-05-30 18:41:34",
    "1": "1",
    "2": "9",
    "Date": "2021-05-30 18:41:34",
    "ProdRate": "1",
    "CheckedCylinders": "9"
  },
  {
    "0": "2021-05-30 18:32:28",
    "1": "1",
    "2": "8",
    "Date": "2021-05-30 18:32:28",
    "ProdRate": "1",
    "CheckedCylinders": "8"
  },
  {
    "0": "2021-05-30 09:20:19",
    "1": "1",
    "2": "8",
    "Date": "2021-05-30 09:20:19",
    "ProdRate": "1",
    "CheckedCylinders": "8"
  }
]

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
     let k = x[key].split(" ")[0];
     if (rv[k]){
      rv[k][0] += +x.ProdRate;
      rv[k][1] += +x.CheckedCylinders;
      rv[k][2] += rv[k][0]/rv[k][1]; 
     }else{
      rv[k] = [+x.ProdRate,+x.CheckedCylinders, (+x.ProdRate)/(+x.CheckedCylinders)];
     }
    return rv;
  }, {});
};
var groubedByDay=groupBy(data, 'Date');

degassingReport(groubedByDay);


function degassingReport(datas) {
  //DATE & TIME Total Cyl Checked   Production Rate

  $(".degassingReportHead").append(`
        <tr>
        <th>DATE & TIME</th>
        <th>Total Cyl Checked</th>
        <th>Production Rate</th>
        </tr>
        `);

  for (var x in datas) {
    $(".degassingReportbody").append(`
        <tr>
        <td>${x}</td>
        <td>${datas[x][1]}</td>
        <td>${datas[x][2]}</td>
        </tr>
        `);
  }
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table>
  <thead class = "degassingReportHead"></thead>
  <tbody class = "degassingReportbody"></tbody>
</table>

Другие вопросы по теме