如何在StartTime和EndTime时间戳之间过滤对象数组并获取匹配记录

问题描述 投票:-1回答:1

我有一个开始时间startTime 3:30 pm endTime 8:00 pm,并且我有第二个对象startTime 5:30到6:45,这是匹配记录,因为这是在3:30 pm endTime 8:00 pm以下。那么我们如何在javascript中进行匹配

{"entries":[{"memberId":"5bd06f45607ed03804018267","startTime":1574719200000,"endTime":1574735400000,"description":"Description","issue":"ZFJ-25","issueType":null,"issuePriority":null,"issueStatus":null,"issueSummary":"isues tect","projectKey":"ZFJ","projectName":"ZFJ","worklogId":"10299","epicKey":null,"accountKey":null,"componentKey":[],"fixVersion":null,"subTask":[],"sprint":null,"issueReporter":null,"role":null,"planned":false,"locked":true,"approvalId":"5bd06f45607ed0380401826720193023","timeSpent":"16200","mirhaiTask":null,"clientKey":"56583e1e-00d6-3794-aa29-408e43ec2bff","id":"5bd06f45607ed038040182671574836779805"},{"memberId":"5bd06f45607ed03804018267","startTime":1574725545000,"endTime":1574730045000,"description":"Description","issue":"ZFJ-24","issueType":null,"issuePriority":null,"issueStatus":null,"issueSummary":"some issue","projectKey":"ZFJ","projectName":"ZFJ","worklogId":"10298","epicKey":null,"accountKey":null,"componentKey":[],"fixVersion":null,"subTask":[],"sprint":null,"issueReporter":null,"role":null,"planned":false,"locked":true,"approvalId":"5bd06f45607ed0380401826720193023","timeSpent":"4500","mirhaiTask":null,"clientKey":"56583e1e-00d6-3794-aa29-408e43ec2bff","id":"5bd06f45607ed038040182671574836752275"},{"memberId":"5bd06f45607ed03804018267","startTime":1574736300000,"endTime":1574747100000,"description":"mqbsqnm","issue":"ZFJ-32","issueType":null,"issuePriority":null,"issueStatus":null,"issueSummary":"abcd","projectKey":"ZFJ","projectName":"ZFJ","worklogId":"10303","epicKey":null,"accountKey":null,"componentKey":[],"fixVersion":null,"subTask":[],"sprint":null,"issueReporter":null,"role":null,"planned":false,"locked":true,"approvalId":"5bd06f45607ed0380401826720193023","timeSpent":"10800","mirhaiTask":null,"clientKey":"56583e1e-00d6-3794-aa29-408e43ec2bff","id":"5bd06f45607ed038040182671575023958801"},{"memberId":"5bd06f45607ed03804018267","startTime":1574756100000,"endTime":1574766900000,"description":"dss","issue":"ZFJ-30","issueType":null,"issuePriority":null,"issueStatus":null,"issueSummary":"HI","projectKey":"ZFJ","projectName":"ZFJ","worklogId":"10305","epicKey":null,"accountKey":null,"componentKey":[],"fixVersion":null,"subTask":[],"sprint":null,"issueReporter":null,"role":null,"planned":false,"locked":true,"approvalId":null,"timeSpent":"10800","mirhaiTask":null,"clientKey":"56583e1e-00d6-3794-aa29-408e43ec2bff","id":"5bd06f45607ed038040182671575189847753"}],"memberId":"5bd06f45607ed03804018267","totalHours":11,"numIssues":4,"status":"APPROVED"}
javascript
1个回答
2
投票

使用filter()方法:

var startTime = 1575158418000;
var endTime = 1575244758000;

var entries = [
  {
    startTime: 1575190818000,
    endTime: 1575212418000
  },
  {
    startTime: 1575277218000,
    endTime: 1575284418000
  }
];

var matchingEntries = entries.filter(entry =>
  entry.startTime >= startTime && entry.endTime <= endTime);

编辑:

我认为这更接近海报的实际需求。在这里,我们遍历entrys数组并返回具有另一个项目(=具有不同标识符的项目,在这种情况下为workLogId)的项目,其开始日期和结束日期重叠。 (matches()功能逻辑未完成。)

var entries = [
  {
    workLogId: 1,
    startTime: 1575208808000,
    endTime: 1575216008000
  },
  {
    workLogId: 2,
    startTime: 1575205208000,
    endTime: 1575223208000
  },
  {
    workLogId: 3,
    startTime: 1575277218000,
    endTime: 1575284418000
  }
];

var matches = (entry1, entry2) =>
 entry1.startTime >= entry2.startTime && entry1.endTime <= entry2.endTime ||
 entry2.startTime >= entry1.startTime && entry2.endTime <= entry1.endTime
 // todo: more conditions

var matchingEntries = entries.filter(entry =>
  entries.filter(e => e.workLogId !== entry.workLogId).some(e => matches(e, entry)));
© www.soinside.com 2019 - 2024. All rights reserved.