按不同名称筛选最新版本的数组(javascript)
我正试图用javascript获取每个不同名称的最新结果 与这篇文章类似,它是sql: 在javascript中最简单的方法是什么 到目前为止,我能想到的最好方法是创建一个唯一名称的数组,然后为每个名称筛选结果,按日期降序排列这些结果,然后将第一个结果推送到一个新数组中。但似乎很多 下面是一个示例阵列:按不同名称筛选最新版本的数组(javascript),javascript,angular,typescript,Javascript,Angular,Typescript,我正试图用javascript获取每个不同名称的最新结果 与这篇文章类似,它是sql: 在javascript中最简单的方法是什么 到目前为止,我能想到的最好方法是创建一个唯一名称的数组,然后为每个名称筛选结果,按日期降序排列这些结果,然后将第一个结果推送到一个新数组中。但似乎很多 下面是一个示例阵列: [{"name": "John", "points": "400", "date": "2011-01-05"} {"name": "John", "points": "410", "date"
[{"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);
如果两个条件之一匹配,则推送或替换新阵列中的对象:
const数据=[
{姓名:“约翰”,分数:“400”,日期:“2011-01-05”},
{姓名:“约翰”,分数:“410”,日期:“2011-06-31”},
{姓名:“简”,分:“147”,日期:“2011-09-21”},
{姓名:“杰克”,分数:“68”,日期:“2011-07-14”},
{姓名:“杰克”,分数:“100”,日期:“2011-10-30”}
];
const latest=[];
对于(数据项){
const found=latest.findIndex(l=>l.name==item.name)
如果(找到!=-1){
如果(item.date>数据[found].date){
最新[找到]=项;//替换
}
持续
}
最新。推送(项目);//添加新项目
}
console.log(最新版本)代码>只需迭代列表并跟踪地图中每个名称的最新结果。如果下一个值更晚,则替换它。谢谢丹尼。那会是什么样子?