避免多个嵌套循环

时间:2016-11-08 22:58:14

标签: javascript angularjs arrays

如何实现以下没有嵌套 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"
}, ]

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

我想我可能会这样做。如果没有三个或更多嵌套循环,还有另一种方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:5)

使用映射很容易。请参阅lodash _.map

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

也可以在ES6中实现

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

但是lodash的实施速度更快。

答案 1 :(得分:-1)

试试这个我希望它能运作:

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

工作演示:

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>