【问题标题】:get the timestamp according to their events in an Object and push it into an Array?根据对象中的事件获取时间戳并将其推送到数组中?
【发布时间】:2020-04-08 13:15:18
【问题描述】:

我正在尝试获取特定对象中所有事件类型的时间戳,例如在 XYZ 中有 openprocesseddelivered 我想获取所有事件的时间戳并将其推送到每个对象的数组。

var data = {
  XYZ: [
    {
      email: "amar045@gmail.com",
      office: "xyz.in",
      reportName: "payroll",
      event: "open",
      timestamp: "02-12-2019 00:15:29"
    },
    {
      email: "amar045@gmail.com",
      office: "xyz.in",
      reportName: "payroll",
      event: "processed",
      timestamp: "02-12-2019 00:15:32"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "open",
      timestamp: "02-12-2019 00:15:34"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "delievered",
      timestamp: "02-12-2019 00:15:36"
    },
    {
      email: "amar045@gmail.com",
      office: "xyz.in",
      reportName: "payroll",
      event: "processed",
      timestamp: "02-12-2019 00:15:38"
    }
  ]
};

我的代码是

function get_timestamps(data, event) {
  var timestamps = [];

  for (key in data) {
    var arr = data[key];
    timestamps = timestamps.concat(
      arr.filter(a => a.event == event).map(a => a.timestamp)
    );
  }
  return timestamps;
}
var openTime = get_timestamps(data, "open");
var proceesTime = get_timestamps(data, "processed");
var delieverdTime = get_timestamps(data, "delivered");

目前,我已经分别获得了所有事件的时间戳,当我尝试合并它们时,它无法满足我的要求。

预期的输出是

 [['open timestamp1','processed timestamp1','delivered timestamp1','open timestamp2','processed timestamp2','delivered timestamp2'],

    ['open timestamp1','processed timestamp1','delivered timestamp1','open timestamp2','processed timestamp2','delivered timestamp2']]

【问题讨论】:

  • 发布您已经尝试过的内容,我们可以告诉您如何继续
  • @DovRine 你能提出一些建议吗
  • 几分钟后,我想到了一个 array.reduce 的想法。同时,您是否知道整个数据对象中的“delivered”拼写错误?
  • 这是手写对象,所以拼写错误。
  • 您是否还想嵌套输出数组的副本?

标签: javascript arrays object timestamp


【解决方案1】:

这是我的第一个想法,但我认为输出可能需要再次排序。我试图让它尽可能接近您的原始代码,以便您更容易理解和修改它:

function get_timestamps(data, event) {
timestamps = []
for (key in data) {
    var arr = data[key]
    timestamps.push(arr.map(a => `${a.event} ${a.timestamp}`))
}
return timestamps

}

【讨论】:

  • 是的,输出需要按事件排序,所以我可以这样得到输出['delivered', 'open','processed']
【解决方案2】:

我可能误会了一些东西,因为我得到的订单输出与你期望的输出不同,无论如何,这就是我提出的解决方案

观察。

我还没有确定为什么在 stackoverflow 中运行 sn-p 而不是我得到 NaN 的时间戳的原因,当我用节点测试脚本时,我得到了正确的时间戳值。我附上了使用节点运行时的结果截图

const data = {
  xyz: [
    {
      email: "amar045@gmail.com",
      office: "xyz.in",
      reportName: "payroll",
      event: "open",
      timestamp: "02-12-2019 00:15:29"
    },
    {
      email: "amar045@gmail.com",
      office: "xyz.in",
      reportName: "payroll",
      event: "processed",
      timestamp: "02-12-2019 00:15:32"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "delievered",
      event: "open",
      timestamp: "02-12-2019 00:15:34"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "delievered",
      event: "delievered",
      timestamp: "02-12-2019 00:15:34"
    },
    {
      email: "amar045@gmail.com",
      office: "xyz.in",
      reportName: "payroll",
      event: "processed",
      timestamp: "02-12-2019 00:15:32"
    }
  ],
  yyy: [
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "delivered",
      timestamp: "02-12-2019 00:15:29"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "open",
      timestamp: "02-12-2019 00:15:32"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "delievered",
      event: "open",
      timestamp: "02-12-2019 00:15:34"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "delivered",
      timestamp: "02-12-2019 00:15:29"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "open",
      timestamp: "02-12-2019 00:15:32"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "delievered",
      event: "open",
      timestamp: "02-12-2019 00:15:34"
    }
  ],
  zzz: [
    {
      email: "amar045@gmail.com",
      office: "xyz.in",
      reportName: "payroll",
      event: "delivered",
      timestamp: "02-12-2019 00:15:29"
    },
    {
      office: "xyz.in",
      reportName: "payroll",
      event: "open",
      timestamp: "02-12-2019 00:15:32"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "delievered",
      event: "open",
      timestamp: "02-12-2019 00:15:34"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "delivered",
      timestamp: "02-12-2019 00:15:29"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "payroll",
      event: "open",
      timestamp: "02-12-2019 00:15:32"
    },
    {
      email: "amar0445@gmail.com",
      office: "yyy.in",
      reportName: "delievered",
      event: "open",
      timestamp: "02-12-2019 00:15:34"
    }
  ]
};

const object = {};

for (const [key, value] of Object.entries(data)) {
  const output = value.map(
    item => `${item.event} ${new Date(item.timestamp).getTime()}`
  );

  object[key] = output;
}

console.log(JSON.stringify(object, null, 4));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 2023-02-01
    • 1970-01-01
    • 2011-04-11
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多