比较对象数组中的日期和时间
Compare date and time in array of objects
我正在尝试比较日期和时间来处理我的数据。我需要通过检查对象中的 updated_at
键来检查哪个是最新数据。
下面我给出了场景。
// below is my data to be manipulat
[{
"is_latest": "",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
}, {
"is_latest": "",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
}, {
"is_latest": "",
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z" // this is the latest data
}]
我正在尝试这样,但是如何在这里使用时刻来比较哪个是最新的。
for (var i = 0; i < data.length; i++) {
if (data[i].updated_at > data[i + 1].updated_at) {
data.is_latest = "true"
}
}
但我没有得到如下预期的结果。
[{
"is_latest": "false",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
}, {
"is_latest": "false",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
}, {
"is_latest": true,
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z"
}]
我如何使用 map()
或 reduce() 来做到这一点?
您可以通过映射 updated_at
字段值并将它们分散在 Math.max
调用中来找到最新日期。将 Unix 纪元转换回日期后,您可以使用 Array.prototype.find
找到它并将 is_latest
设置为 true
。
注意: 由于您的日期采用 ISO 8601 格式,将它们转换回来就像调用 Date.prototype.toISOString
.
一样简单
const data = [{
"is_latest": false,
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
}, {
"is_latest": false,
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
}, {
"is_latest": false,
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z" // this is the latest data
}];
const latestDate = new Date(Math.max(...(data.map(({ updated_at }) =>
new Date(updated_at))))).toISOString();
data.find(({ updated_at }) => updated_at === latestDate).is_latest = true;
console.log(data);
.as-console-wrapper { top: 0; max-height: 100% !important; }
您应该检查它的地图并获取最大日期索引。然后将其值设置为 true;
var data = [
{
"is_latest": "",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-30T21:24:05.000Z",
"updated_at": "2021-09-30T17:53:29.000Z"
}
]
var maxDateIndex = 0;
var newData = data.map((item, index) => {
if(item.updated_at > data[maxDateIndex].updated_at)
maxDateIndex = index;
item.is_latest = "false";
return item;
});
newData[maxDateIndex].is_latest = "true";
console.log(newData);
无需转换为 Date
对象并返回;坚持使用字符串并使用 localeCompare
。然后只需反向排序值并选择第一个。
let data = [{
"is_latest": "",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z" // this is the latest data
}
];
const trueVal = true; // change to "true" if you want a string
const falseVal = false; // change to "false" if you want a string
data.sort((a, b) => b.updated_at.localeCompare(a.updated_at));
data[0].is_latest = trueVal;
data.filter(datum => !datum.is_latest).forEach(datum => datum.is_latest = falseVal);
console.log(data);
我正在尝试比较日期和时间来处理我的数据。我需要通过检查对象中的 updated_at
键来检查哪个是最新数据。
下面我给出了场景。
// below is my data to be manipulat
[{
"is_latest": "",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
}, {
"is_latest": "",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
}, {
"is_latest": "",
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z" // this is the latest data
}]
我正在尝试这样,但是如何在这里使用时刻来比较哪个是最新的。
for (var i = 0; i < data.length; i++) {
if (data[i].updated_at > data[i + 1].updated_at) {
data.is_latest = "true"
}
}
但我没有得到如下预期的结果。
[{
"is_latest": "false",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
}, {
"is_latest": "false",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
}, {
"is_latest": true,
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z"
}]
我如何使用 map()
或 reduce() 来做到这一点?
您可以通过映射 updated_at
字段值并将它们分散在 Math.max
调用中来找到最新日期。将 Unix 纪元转换回日期后,您可以使用 Array.prototype.find
找到它并将 is_latest
设置为 true
。
注意: 由于您的日期采用 ISO 8601 格式,将它们转换回来就像调用 Date.prototype.toISOString
.
const data = [{
"is_latest": false,
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
}, {
"is_latest": false,
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
}, {
"is_latest": false,
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z" // this is the latest data
}];
const latestDate = new Date(Math.max(...(data.map(({ updated_at }) =>
new Date(updated_at))))).toISOString();
data.find(({ updated_at }) => updated_at === latestDate).is_latest = true;
console.log(data);
.as-console-wrapper { top: 0; max-height: 100% !important; }
您应该检查它的地图并获取最大日期索引。然后将其值设置为 true;
var data = [
{
"is_latest": "",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-30T21:24:05.000Z",
"updated_at": "2021-09-30T17:53:29.000Z"
}
]
var maxDateIndex = 0;
var newData = data.map((item, index) => {
if(item.updated_at > data[maxDateIndex].updated_at)
maxDateIndex = index;
item.is_latest = "false";
return item;
});
newData[maxDateIndex].is_latest = "true";
console.log(newData);
无需转换为 Date
对象并返回;坚持使用字符串并使用 localeCompare
。然后只需反向排序值并选择第一个。
let data = [{
"is_latest": "",
"created_at": "2021-09-21T21:24:05.000Z",
"updated_at": "2021-09-21T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-22T21:24:05.000Z",
"updated_at": "2021-09-22T17:53:29.000Z"
},
{
"is_latest": "",
"created_at": "2021-09-29T21:24:05.000Z",
"updated_at": "2021-09-29T17:53:29.000Z" // this is the latest data
}
];
const trueVal = true; // change to "true" if you want a string
const falseVal = false; // change to "false" if you want a string
data.sort((a, b) => b.updated_at.localeCompare(a.updated_at));
data[0].is_latest = trueVal;
data.filter(datum => !datum.is_latest).forEach(datum => datum.is_latest = falseVal);
console.log(data);