Lodash uniqBy 创建日期?
Lodash uniqBy created date?
嗨,我有这样的数据集
- ID:1,创建日期:7 月 7 日
- ID:1,创建日期:7 月 5 日
- ID:2,创建日期:7 月 7 日
- ID:2,创建日期:5-7 月
我想获取唯一值(按 ID),但选择最新版本(按日期)。
在上面的示例中,应返回第 1 项和第 3 项。
关于最干净的方法有什么建议吗?
谢谢!
您可以使用 Array.reduce 创建输入对象的映射,键入 ID
。
我们需要创建一个函数来解析 createDate 值,因为我们无法将其作为字符串进行比较。
如果 ID 处的映射条目为空,或者具有更早的创建日期,我们将在每次迭代时替换它:
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)
嗨,我有这样的数据集
- ID:1,创建日期:7 月 7 日
- ID:1,创建日期:7 月 5 日
- ID:2,创建日期:7 月 7 日
- ID:2,创建日期:5-7 月
我想获取唯一值(按 ID),但选择最新版本(按日期)。 在上面的示例中,应返回第 1 项和第 3 项。
关于最干净的方法有什么建议吗?
谢谢!
您可以使用 Array.reduce 创建输入对象的映射,键入 ID
。
我们需要创建一个函数来解析 createDate 值,因为我们无法将其作为字符串进行比较。
如果 ID 处的映射条目为空,或者具有更早的创建日期,我们将在每次迭代时替换它:
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)