如何根据JS中的条件向数组对象添加新行



我有一个数组对象,如下

[
{
id: 123,
startdate: '2022-06-05',
enddate: '2023-04-05'
},{
id: 123,
startdate: '2021-06-05',
enddate: '2021-04-05'
}
]

如果它属于当前年份,我必须根据开始日期的条件添加一行isHistory。就像上面的例子一样,结果应该是

[
{
id: 123,
startdate: '2022-06-05',
enddate: '2023-04-05',
isHistory: false
},{
id: 123,
startdate: '2021-06-05',
enddate: '2021-04-05',
isHistory: true
}
]

我怎样才能做到这一点?我试图通过对象进行映射,但如何比较每次迭代的开始日期并添加新行,我在这方面很吃力。

有什么建议吗?

使用forEach在数组上循环并修改每个对象。

let array = [{
id: 123,
startdate: '2022-06-05',
enddate: '2023-04-05'
}, {
id: 123,
startdate: '2021-06-05',
enddate: '2021-04-05'
}];
const currentYear = new Date().getFullYear();
array.forEach(obj => obj.isHistory = obj.startdate.startsWith(currentYear));
console.log(array);

您可以将数据作为Date对象进行比较。看看你的代码,我不确定你是否正确地传达了你的逻辑,所以我的例子展示了如何确定当前日期是否包括在开始日期和结束日期之间。

let array = [{
id: 123,
startdate: '2022-06-05',
enddate: '2023-04-05'
}, {
id: 123,
startdate: '2022-01-05',
enddate: '2022-06-05'
}, {
id: 123,
startdate: '2023-04-05',
enddate: '2024-06-04'
}];
const today = new Date()
array.forEach(obj => {
const startDate = new Date(obj.startdate)
const endDate = new Date(obj.enddate)
obj.isHistory = (today > endDate) // end date is in the past
obj.isCurrent = ((today <= endDate) && (today >= startDate)) // before end, after start
obj.isFuture = (today < startDate) // start date is in future
});
console.log(array);

您可以在数组上循环并检查每个对象,如下所示:

const arr = [
{
id: 1,
startdate: "2022-06-05",
enddate: "2023-04-05"
},
{
id: 12,
startdate: "2021-06-05",
enddate: "2021-04-05"
}
];
arr.map((item) => {
if (item.startdate.includes("2022")) {
item.isHistory = false;
} else {
item.isHistory = true;
}
return item;
});

最新更新