我有一个开始时间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"}
使用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)));