首页 > 解决方案 > 使用时间戳更新对象数组

问题描述

我有这样的数据结构:

var records = [
  {
    firstName: "Akira",
    id: "0543236543",
  },
  {
    firstName: "Harry",
    id: "0994372684",
  },
  {
    firstName: "Sherlock",
    id: "0487345643",
  },
  {
    firstName: "Kristian",
    id: "04873452342",
  },
];

我想创建一个函数,根据数组的长度将日期属性(按小时调整)添加到数组中的每个对象。

到目前为止,这是我的代码

function updateObject(obj) {
  let timeNow = new Date();
  let addHours = (h) => timeNow.setHours(timeNow.getHours() + h);
  const ids = obj.map((record) => record.id);
  const lastNames = obj.map((record) => record.id);
  const time = obj.map(
    (record, index) => (record["time"] = new Date(addHours(index)))
  );
  return obj;
}

这将返回:

[
  {
    firstName: 'Akira',
    id: '0543236543',
    time: 2021-05-18T12:25:59.366Z
  },
  {
    firstName: 'Harry',
    id: '0994372684',
    time: 2021-05-18T13:25:59.366Z
  },
  {
    firstName: 'Sherlock',
    id: '0487345643',
    time: 2021-05-18T15:25:59.366Z
  },
  {
    firstName: 'Kristian',
    id: '04873452342',
    time: 2021-05-18T18:25:59.366Z
  }
]

第一个问题:我想通过将0,1,2,3小时添加到当前时间来更新时间。当前它:将 0 加到时间并设置为当前时间 将 1 加到更新时间并将其设置为当前时间等等。

第二:我想修改函数,所以它需要一个额外的参数“时间增量”,如果设置为 x 将更新前 x 条记录的时间属性为 0 小时,接下来的 x 条记录为 1 小时。

希望这是有道理的:)

标签: arraysobject

解决方案


第一个问题可以通过更改addHours为不变异的纯函数来解决timeNow

const timeNow = Date.now();
const addHours = (h) => new Date(timeNow + h * 60 * 60 * 1000);

第二个问题可以通过查看地图中的索引来解决:

const time = obj.map(
(record, index) => (record["time"] = new Date(addHours(index > increment ? 1 : 0))));

一般来说,我建议不要改变对象/数组。纯函数通常更容易推理并且提供更少的惊喜。我会编写该updateObject函数,因此它不会改变原始函数,而是返回一个带有新对象的新数组。


推荐阅读