【问题标题】:Remove duplicate values from JSON array based on key (date) in JS根据JS中的键(日期)从JSON数组中删除重复值
【发布时间】:2021-05-01 08:58:59
【问题描述】:

我想根据以下条件从数组中删除重复值。

  1. 如果结束日期相同
  2. 如果开始日期小于其他日期,则使用较小的开始日期值。

下面是输入和例外输出。

输入:

[
  {
    "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


【解决方案1】:
const obj = arr.reduce((init, item)=> (init[item.EndDate] && item.StartDate > init[item.EndDate] ? ({...init,[item.EndDate]: init[item.EndDate]}) : ({ ...init,[item.EndDate]: item.StartDate}) ), {})
const result = Object.entries(a).map(([k,v])=> ({StartDate: v, EndDate: k}))

这是我的代码。

第 1 步:我将其转换为 obj,其中 EndDate 作为键,StartDate 作为键的值。之后,我检查了 obj 中的 StartDate 和 StartDate 是否存在

第 2 步:我将对象转换为数组

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-29
    • 2020-04-03
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多