Как добавить итерационную функцию в цикл для расчета длительности по датам для выбора значений объектов массива? - PullRequest
0 голосов
/ 03 февраля 2019

Мой вопрос новичка в JS на самом деле включает в себя несколько компонентов (подробно описано ниже), но я был бы рад получить помощь только по основам: Как рассчитать разницу между датами для выбора значений объектов в массиве?

Я понимаю, что в Интернете есть много примеров того, как создавать итерационные циклы и , исследуя разницу между датами .Но в большинстве этих примеров вычисления длительности используется одна переменная, и примеры в циклах, как правило, включают в себя операторы типа // Do something, а не предоставляют примеры для включения функций.Я (пока) не нашел вопрос, который решает эту конкретную (простую) проблему.

Самое близкое, что я дошел, это то, что стремится вычислить разницу между одним из значений объекта и сегодняшним днем.:

durationArray = {
var myArray = report_data;
var arrayLength = report_data.length;
for (var i = 0; i < arrayLength; i++) {
  var copy = new Date(report_data[i]["Start Date"]);
  var duration_adjusted = (today - copy)/24/60/60/1000;
  return duration_adjusted;
}
  return myArray
}

С report_data, поставляемым как:

report_data =  [{
    "Author Name": "Joe",
    "Unit Name": "IT",
    "Report Name": "Tech Paper 1",
    "Start Date": "2/3/2014",
    "End Date": "21-Mar-17"
  },
  {
    "Author Name": "Carole",
    "Unit Name": "IT",
    "Report Name": "Tech Paper 2",
    "Start Date": "4/8/2015",
    "End Date": "5-May-16"
  },
  {
    "Author Name": "Bob",
    "Unit Name": "IT",
    "Report Name": "Tech Paper 3",
    "Start Date": "6/16/2015",
    "End Date": "30-May-17"
  },
  {
    "Author Name": "Sue",
    "Unit Name": "IT",
    "Report Name": "Tech Paper 4",
    "Start Date": "7/16/2015",
    "End Date": "pending"
  }]

Но этот код неверен, поскольку он возвращает только одно значение (не значения для всех объектов массива).Кроме того, я хотел бы сравнить два объекта в массиве ["Start Date"] и ["End Date], а не только вычислять разницу между сегодняшним днем ​​и датой начала (но я не продвинулся так далеко в моих попытках, потому что я могу 'итерируйте правильно).

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

Если вы чувствуете себя очень щедрым иликак сложная задача (я понимаю, что это очень простой вопрос), то вот где начинается вторая часть вопроса:

В последнем элементе моих фиктивных данных вместо даты есть значение"в ожидании" (указывает, что отчет не закончен).В дополнение к вычислению разницы между объектами массива ["Start Date"] и ["End Date], я хотел бы добавить инструкцию "else", которая для "отложенных" значений вычисляет разницу между today и ["Start Date"].

Надеюсь, это понятно и что меня не слишком сильно ударили, чтобы поднять этот самый вопрос «новичка».Я изучаю JS из дома с помощью учебных пособий, и уже несколько дней пытаюсь правильно их комбинировать, поэтому я обращаюсь к вам за помощью.

Заранее спасибо за ваше время и рекомендации!

Ответы [ 2 ]

0 голосов
/ 03 февраля 2019

Функция map поможет вам изменить каждый элемент вашего набора данных

var modifiedReports = report_data.map(function(item)
{
    item.diff = new Date(item['End Date']).getTime() - new Date(item['Start Date']).getTime();

    return item;
})

В этом примере набор modifiedReports будет содержать те же данные, что и report_data PLUS дополнительное поле с именем diff (количество миллисекунд между начальной и конечной датой)

0 голосов
/ 03 февраля 2019

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

var durationArray = [];
var myArray = report_data;
var arrayLength = report_data.length;
for (var i = 0; i < arrayLength; i++) {
  var copy = new Date(report_data[i]["Start Date"]);
  var duration_adjusted = (today - copy)/24/60/60/1000;
  durationArray.push(duration_adjusted);
}
...