首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lodash uniqBy创建了日期?

Lodash uniqBy创建了日期?
EN

Stack Overflow用户
提问于 2021-07-07 04:24:30
回答 1查看 132关注 0票数 0

嗨,我有这样的数据集

  1. ID: 1,createDate: 7-7月
  2. ID: 1,createDate: 5-7月
  3. ID: 2,createDate: 7-7月
  4. ID: 2,createDate: 5-7月

我想取uniq值(按ID),但选择最新版本(按日期)。在上述例子中,应返回项目1和3。

关于最干净的方法有什么建议吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-07 07:25:56

您可以使用Array.reduce创建输入对象的映射,按ID键。

我们需要创建一个函数来解析createDate值,因为我们不能作为字符串进行比较。

如果ID处的映射条目是空的,或者有一个较早的createDate,那么我们将在每次迭代中替换它:

代码语言:javascript
运行
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68279988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档