嗨,我有这样的数据集
我想取uniq值(按ID),但选择最新版本(按日期)。在上述例子中,应返回项目1和3。
关于最干净的方法有什么建议吗?
谢谢!
发布于 2021-07-07 07:25:56
您可以使用Array.reduce创建输入对象的映射,按ID
键。
我们需要创建一个函数来解析createDate值,因为我们不能作为字符串进行比较。
如果ID处的映射条目是空的,或者有一个较早的createDate,那么我们将在每次迭代中替换它:
const input = [
{ ID: 1, createDate: '7-Jul' },
{ ID: 1, createDate: '5-Jul' },
{ ID: 2, createDate: '7-Jul' },
{ ID: 2, createDate: '5-Jul' },
{ ID: 3, createDate: '1-Jan' },
{ ID: 3, createDate: '31-Dec' }
]
// Assuming date is like 5-Jul
function parseDate(dateString) {
const [day,month] = dateString.toLowerCase().split('-');
const months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
const monthIndex = months.findIndex(mth => mth === month);
return new Date(new Date().getFullYear(), monthIndex, day);
}
const result = Object.values(input.reduce((acc, cur) => {
// Replace the entry at ID _if_ empty or the new item is later
if (!acc[cur.ID] || (parseDate(cur.createDate) > parseDate(acc[cur.ID].createDate))) {
acc[cur.ID] = cur;
}
return acc;
}, {}))
console.log("Result:", result)
https://stackoverflow.com/questions/68279988
复制相似问题