javascript - 按不同名称过滤最新的数组(javascript)
问题描述
我正在尝试在 javascript 中获取每个不同名称的最新结果。
与这篇文章类似,它是 sql: Get Latest Rates For Each Distinct Rate Name
在 javascript 中执行此操作的最简单方法是什么?
到目前为止,我能想到的最好的方法是创建一个唯一名称数组,然后为每个名称过滤结果,按日期降序对这些结果进行排序,然后将第一个结果推入一个新数组。不过好像很多。
下面是一个示例数组:
[{"name": "John", "points": "400", "date": "2011-01-05"}
{"name": "John", "points": "410", "date": "2011-06-31"}
{"name": "Jane", points": "147", "date": "2011-09-21"}
{"name": "Jack", "points": "68", "date": "2011-07-14"}
{"name": "Jack", "points": "100", "date": "2011-10-30"}]
结果应如下所示:
[{"name": "John", "points": "410", "date": "2011-06-31"}
{"name": "Jane", points": "147", "date": "2011-09-21"}
{"name": "Jack", "points": "100", "date": "2011-10-30"}]
解决方案
您可以先按日期降序排序,然后减少为唯一:
var data = [{
"name": "John",
"points": "400",
"date": "2011-01-05"
}, {
"name": "John",
"points": "410",
"date": "2011-06-31"
}, {
"name": "Jane",
"points": "147",
"date": "2011-09-21"
}, {
"name": "Jack",
"points": "68",
"date": "2011-07-14"
}, {
"name": "Jack",
"points": "100",
"date": "2011-10-30"
}
];
data = data.sort((a, b) => new Date(b.date) - new Date(a.date));
var result = data.reduce((accum, record) => {
if(!accum.find(entry => entry.name === record.name)){
accum.push(record);
}
return accum;
}, []);
console.log(result);
推荐阅读
- javascript - EditableForm 打开时编辑 X-Editable 字段的值
- google-apps-script - 在列表中插入项目
- swift - 你可以在 Xcode Playgrounds 中运行 KVC 函数吗?
- javascript - 如何对合并的数组进行重复数据删除?
- selenium - 如何在线将价值从网站转移到 Windows 窗体?
- php - laravel DB查询选择多个表而不加入
- ios - Swift:在后台运行时计时器延迟触发
- html - 不确定如何为背景图像中的图像设置正确的路径
- admin-on-rest - 在 /admin 下挂载 react-admin
- python - Python 返回值只打印对象中的一个值,而不是所有值