arrays - 使用时间戳更新对象数组
问题描述
我有这样的数据结构:
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 小时。
希望这是有道理的:)
解决方案
第一个问题可以通过更改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
函数,因此它不会改变原始函数,而是返回一个带有新对象的新数组。
推荐阅读
- sql - SQL:自某个值首次出现以来的行数
- c++ - 用于单元测试的 C++ 模板模板
- r - 基于任何列中的值的函数内的子集数据
- bots - 一个用户消息可以映射到对话流中的多个意图或操作吗?
- python - Pygame文本不显示
- javascript - TypeError: Object(...) is not a function in Ionic 4 app with ECharts
- node.js - 将对象 ID 推送到嵌套数组 MongoDB/Mongoose
- c# - 在 Roslyn 的 CSharpScript 代码字符串中有逻辑运算符的占位符
- javascript - 在模板内的 vuejs 组件中导入和使用类
- javascript - 如何在不使用组件标签的情况下向组件发送道具?