繁体   English   中英

从 javascript 中的对象数组中获取不同日期(不是时间)的数组

[英]Get array of distinct date(not time) from array of objects in javascript

嘿,我正在 reactjs 做一个出勤项目,我遇到了一个问题,我收到了一系列的出勤,例如(在过去两周的范围内)。 我只需要过滤一组不同的日期,而不是时间,而只是日期。 (一个日期的时间可以不同)

let dates = [
  { id: 51, attendanceTime: "2022-12-26T06:07:02.000Z" },
  { id: 52, attendanceTime: "2022-11-26T06:07:36.000Z" },
  { id: 53, attendanceTime: "2022-10-12T06:28:43.000Z" },
  { id: 54, attendanceTime: "2023-01-01T06:48:53.000Z" },
  { id: 55, attendanceTime: "2022-12-26T06:56:23.000Z" },
];

我已经尝试过方法,但 gettime() 不仅比较所有日期,getDate() 只比较日而不是月和年,所以我需要进行过滤,以便它只区分日期(日、月、年)并过滤我的数组不同的数组。 我需要这样的结果

const result = [
  { id: 51, attendanceTime: "2022-12-26T06:07:02.000Z" },
  { id: 52, attendanceTime: "2022-11-26T06:07:36.000Z" },
  { id: 53, attendanceTime: "2022-10-12T06:28:43.000Z" },
  { id: 54, attendanceTime: "2023-01-01T06:48:53.000Z" },
];

这是不同日期数组的必需结果

你可以尝试这样的事情:

let dates = [
  {id: 51, attendanceTime: '2022-12-26T06:07:02.000Z'},
  {id: 52, attendanceTime: '2022-11-26T06:07:36.000Z' },
  {id: 53, attendanceTime: '2022-10-12T06:28:43.000Z'},
  {id: 54, attendanceTime: '2023-01-01T06:48:53.000Z'},
  {id: 55, attendanceTime: '2022-12-26T06:56:23.000Z'}
];

let distinct = [];

for(let i = 0; i < dates.length; i++){

  let dateFromDates = dates[i].attendanceTime.split("T");
  let duplicate = distinct.filter(dateFromDistinct => dateFromDistinct == dateFromDates[0]);
  if(duplicate.length == 0){
    distinct.push(dateFromDates[0]);
  }
}

console.log(distinct);
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(n)

此外,日期格式必须采用您共享的格式。

您可以使用 Array.filter() 和 Array.substring() 来查找唯一值

 let dates = [ {id: 51, attendanceTime: '2022-12-26T06:07:02.000Z'}, {id: 52, attendanceTime: '2022-11-26T06:07:36.000Z' }, {id: 53, attendanceTime: '2022-10-12T06:28:43.000Z'}, {id: 54, attendanceTime: '2023-01-01T06:48:53.000Z'}, {id: 55, attendanceTime: '2022-12-26T06:56:23.000Z'} ]; let uniqueDate=dates.filter((value,ind,arr)=>arr.findIndex(value2=>(value2.attendanceTime.substring(0, 10)===value.attendanceTime.substring(0, 10)))===ind) console.log('Original',dates, '\nUnique',uniqueDate)

在职的

filter() 方法使用通过 function 提供的测试的元素创建新数组。

语法: dates.filter(function(currentValue, index, arr), thisValue)

substring() 方法从字符串中提取两个索引之间的字符,并返回 substring。

语法: string.substring(start, end)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM