【发布时间】:2021-05-01 08:58:59
【问题描述】:
我想根据以下条件从数组中删除重复值。
- 如果结束日期相同
- 如果开始日期小于其他日期,则使用较小的开始日期值。
下面是输入和例外输出。
输入:
[
{
"StartDate": "2020-01-15",
"EndDate": "2020-02-14"
},
{
"StartDate": "2019-12-13",
"EndDate": "2020-01-15"
},
{
"StartDate": "2019-11-13",
"EndDate": "2020-01-15"
},
{
"StartDate": "2019-10-11",
"EndDate": "2019-11-13"
}
]
输出:
[
{
"StartDate": "2020-01-15",
"EndDate": "2020-02-14"
},
{
"StartDate": "2019-11-13",
"EndDate": "2020-01-15"
},
{
"StartDate": "2019-10-11",
"EndDate": "2019-11-13"
}
]
开始日期:2019 年 12 月 13 日大于 2019 年 11 月 13 日,结束日期相同 2020 年 1 月 15 日,因此将被删除。
请给我建议解决方案。
我已经厌倦了 array.some() 函数,但它只返回值是否重复。
下面是我的代码。
var array = [{"StartDate":"2020-01-15","EndDate":"2020-02-14"},{"StartDate":"2019-12-13","EndDate":"2020-01-15"},{"StartDate":"2019-11-13","EndDate":"2020-01-15"},{"StartDate":"2019-10-11","EndDate":"2019-11-13"}];
var newArray = [];
for (let data of array) {
var result = newArray.some(function (o) {
var d1 = new Date(o["StartDate"]);
var d2 = new Date(data.StartDate);
if (o["EndDate"] === data.EndDate && d1 > d2) {
//console.log(o["StartDate"] +' === '+data.StartDate);
return true;
} else {
return false;
}
});
if (result == false) {
newArray.push({
"StartDate": data.StartDate,
"EndDate": data.EndDate
});
}
}
console.log(newArray);
谢谢
【问题讨论】:
-
如果插件是一个选项,lodash 有这个lodash.com/docs/4.17.15#uniqBy的uniqby
-
请edit您的问题包括您所做的研究以及您根据该研究所做的任何尝试的代码。
-
我在研究中添加了代码。
标签: javascript arrays json duplicates