避免多个嵌套循环

Avoiding multiple nested loops

本文关键字:嵌套循环      更新时间:2023-09-26

如何实现下面的而不嵌套 for循环:

invitations是一个数组,其结构如下:

邀请:

[{
    "id": "TDK4QP788FOLMHQSZAFSYVVQ182RGM83",
    "date_created": "2016-11-08T15:37:04.409Z",
    "events": [{
        "end_time": "21:00",
        "start_time": "20:00"
    }]
}, {
    "id": "DEI4644LAR91SKGUKMR7RTWY3CMC7PCP",
    "date_created": "2016-11-08T03:57:11.145Z",
    "events": [{
        "end_time": "23:45",
        "start_time": "06:00"
    }]
}]

事件:

[{
    "end_time": "23:45",
    "start_time": "06:00"
}, {
    "end_time": "23:45",
    "start_time": "06:00"
}, {
    "end_time": "23:45",
    "start_time": "06:00"
}, ]

我想循环遍历邀请数组,然后循环遍历每个事件项,然后将项目的开始和结束时间与事件数组中的每个项目进行比较,同时也循环遍历事件数组。

我想我可能做得太过分了。有没有另一种不需要三个或更多嵌套循环的方法?

使用映射非常简单。参见lodash _.map

var results = _.map(invitations, 'events');

也可以在ES6中使用

实现
 var results = invitations.map(function(invitation) {
     return invitation.events;
 });

但是lodash的实现更快。

试试这个,我希望它会工作:

在这里,我们必须迭代invitations数组两次以获得事件数组元素,并根据要求创建一个新数组。

工作演示:

var invitations = [{
    "id": "TDK4QP788FOLMHQSZAFSYVVQ182RGM83",
    "date_created": "2016-11-08T15:37:04.409Z",
    "events": [{
        "end_time": "21:00",
        "start_time": "20:00"
    }]
}, {
    "id": "DEI4644LAR91SKGUKMR7RTWY3CMC7PCP",
    "date_created": "2016-11-08T03:57:11.145Z",
    "events": [{
        "end_time": "23:45",
        "start_time": "06:00"
    }]
}];
var events = [];
for (var i in invitations) {
  for (var j in invitations[i].events) {
    events.push(invitations[i].events[j]); 
  }
}
 
document.getElementById("results").innerHTML = JSON.stringify(events);
#results {
  font-weight : bold;
  }
<div id="results"></div>