【问题标题】:Avoiding multiple nested loops避免多个嵌套循环
【发布时间】:2016-11-08 22:58:14
【问题描述】:

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

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

我想我可能已经结束了。如果没有三个或更多嵌套循环,是否还有另一种可能的方法?

提前致谢。

【问题讨论】:

  • 我认为部分问题丢失了......“实现以下目标”是什么意思?我只看到起始结构的“下面”是什么?
  • 我认为下面是events
  • 问题非常不清楚,你说的“通过下面实现”是什么意思,下面似乎没有明确的关系
  • 我需要按照说明比较日期。我不想重复多次。从被邀请的每个事件开始,与其他事件数组进行比较。
  • 哦 :) 那么下面的@valentin 答案将从邀请中提取事件,并且只是 for..for 在两个事件列表中进行比较

标签: javascript angularjs arrays


【解决方案1】:

使用映射非常容易。见lodash _.map

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

也可以在 ES6 中实现

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

但 lodash 的实现速度更快。

【讨论】:

  • 不知道。我也想知道。 underscorelodash 用户之间发生了一场战争,可能与此有关。因为没有比这更干净的方法了。
  • 其实有。用 lodash 你可以写var results = _.map(invitations, 'events');
  • FWIW 你也可以用下划线来做到这一点。
  • 是的,这是有道理的。它们几乎是克隆体。
  • 所以我会映射事件,然后只有一个嵌套的 for 循环正确吗?
【解决方案2】:

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

这里,我们必须对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>

【讨论】:

  • 虽然这可行,但他确实要求没有嵌套for循环的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2023-03-15
  • 1970-01-01
  • 2012-06-25
  • 2017-08-27
  • 2017-11-11
  • 1970-01-01
相关资源
最近更新 更多