如何在循环中添加迭代函数以计算日期的持续时间以选择数组对象值?

How to add iteration function in loop to calculate duration from dates for selection of array object values?

我的 JS 新手问题实际上涉及几个部分(详见下文),但我很乐意在基础知识方面得到帮助:How to calculate the difference between dates for selection of object values in在数组中?

我知道互联网上有很多 creating iterative loops and examining the difference between dates 的例子。但是这些计算持续时间的例子中的大多数都使用一个变量,并且循环中的例子倾向于包含像 // 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"
  }]

但是这段代码是错误的,因为它只有 returns 一个值(不是所有数组对象的值)。另外,我想比较数组 ["Start Date"]["End Date] 中的两个对象,而不是只计算今天和开始日期之间的差异(但我的尝试还没有做到这一点 b/c 我无法正确迭代)。

如果有助于回答,here's an Obeservable notebook with my errant code

如果你觉得特别慷慨或者想要更多的挑战(我知道这是一个非常基本的问题),那么问题的第二部分就在这里:

在我的虚拟数据的最后一项中,没有日期,而是值 "pending"(表示报告未完成)。除了计算数组对象 ["Start Date"]["End Date] 之间的差异,我想添加一个 "else" 语句,用于计算 [=18] 之间的差异的 "pending" 值=] 和 ["Start Date"].

我希望这很清楚,并且我不会因为提出这个非常 'newbie' 的问题而受到猛烈抨击。我正在通过教程在家学习 JS,并且一直在努力将它们适当地结合起来,所以我向您寻求帮助。

提前感谢您的时间和指导!

我不知道你从哪里得到这个语法,但它应该看起来像这样:

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);
}

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 的字段(开始之间的毫秒数和结束日期)