使用下面的代码,我能够获得重复,但是我试图通过使用transactionDate
属性从每种药物中获取最新对象,下面的代码仅过滤重复的任何想法,如何获取每种药物的最新交易。
main.js
var drugsArray = [{
drugName: "ADVIL",
transactionDate: "2018-12-15"
},{
drugName: "ADVIL",
transactionDate: "2018-12-28"
},
{
drugName: "ATRIPLA",
transactionDate: "2018-12-05"
},{
drugName: "ATRIPLA",
transactionDate: "2018-12-21"
}
];
function getDrugs(data) {
let filtered = data.reduce((accumulator, current) => {
if (! accumulator.find(({drugName}) => drugName === current.drugName)) {
var checkRecentDate = getLatestDateSave(current.transactionDate)
if(checkRecentDate) {
accumulator.push(current);
}
}
return accumulator;
}, []);
console.log(filtered);
}
getDrugs(drugsArray);
使用此功能获取最近的日期对象
function getLatestDateSave(xs) {
if (xs.length) {
return xs.reduce(function(m, i) {
return (i.MeasureDate > m) && i || m;
}, "").MeasureDate;
}
}
预期输出为
result = [{
drugName: "ADVIL",
transactionDate: "2018-12-28"
},
{
drugName: "ATRIPLA",
transactionDate: "2018-12-21"
}
];
答案 0 :(得分:4)
您可以使用reduce()方法来解决这个问题。同样,使用您在日期上使用的格式,可以将它们直接作为字符串进行比较。示例:
var drugsArray = [
{drugName: "ADVIL", transactionDate: "2018-12-15"},
{drugName: "ADVIL", transactionDate: "2018-12-28"},
{drugName: "ATRIPLA", transactionDate: "2018-12-05"},
{drugName: "ATRIPLA", transactionDate: "2018-12-21"}
];
let result = drugsArray.reduce((res, curr) =>
{
let exists = res.findIndex(x => x.drugName === curr.drugName);
if (exists < 0)
res.push(curr);
else if (res[exists].transactionDate < curr.transactionDate)
res[exists].transactionDate = curr.transactionDate;
return res;
}, []);
console.log(result);
答案 1 :(得分:1)
您可以先将交易分组为一个数组对象,然后按降序对日期进行排序并选择第一个:
?
答案 2 :(得分:0)
我所做的是按交易日期然后按名称对数组进行排序。然后,我在此thread中采用了重复过滤器方法,该方法可以过滤出重复集中发现的第一项。
var drugsArray = [{
drugName: "ADVIL",
transactionDate: "2018-12-15"
},{
drugName: "ADVIL",
transactionDate: "2018-12-28"
},
{
drugName: "ATRIPLA",
transactionDate: "2018-12-05"
},{
drugName: "ATRIPLA",
transactionDate: "2018-12-21"
},
{
drugName: "AMBIEN",
transactionDate: "2018-02-05"
},{
drugName: "AMBIEN",
transactionDate: "2018-12-06"
}
];
function getDrugs(){
const output = drugsArray
.sort(function(d1, d2){
return new Date(d1.transactionDate) < new Date(d2.transactionDate) ? 1 : -1;
})
.sort(function(d1, d2){
return d1.drugName < d2.drugName ? -1 : 1;
})
.filter(function(value, index, self) {
return index === self.findIndex(function(i){
return i.drugName === value.drugName
})
});
return output;
}
console.log(getDrugs());
现在,这仅将日期评估为字符串。在比较之前,您可以先将日期字符串隐式转换为Date对象。