2016-11-08 4 views
0

Wie kann ich die folgenden ohne verschachtelte für Schleifen erreichen:Vermeiden mehrere verschachtelte Schleifen

invitations ein Array mit der folgenden Struktur ist:

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" 
    }] 
}] 

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" 
}, ] 

Ich überlegte, das Einladungsarray zu durchlaufen, dann durchlaufen Sie jedes Ereigniselement und vergleichen dann die Anfangs- und Endzeiten dieses Elements mit jedem Element im Ereignisarray, während auch das Ereignisarray durchlaufen wird.

Ich denke, ich könnte damit fertig sein. Gibt es eine andere Möglichkeit, dies ohne drei oder mehr verschachtelte Schleifen zu tun?

Vielen Dank im Voraus.

+0

Ich denke, ein Teil der Frage fehlt ... was meinst du mit "die unten erreichen" ?? Was ist das "Unten"? Ich sehe nur die Ausgangsstrukturen? – danchik

+0

Ich denke, das ist unten "Ereignisse". –

+0

Frage ist extrem unklar, was meinst du mit "durch unten erreichen", das unten scheint keine klare Beziehung zu haben –

Antwort

4

Mit Mapping ist es sehr einfach. Siehe lodash _.map.

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

Kann auch mit

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

Aber lodash Implementierung ist schneller in ES6 erreicht werden.

+1

Danke, warum wurde diese Antwort downvoted? – user1027620

+0

Keine Ahnung. Ich habe mich auch gewundert. Es gibt einen Krieg zwischen "Unterstrichen" und "Lodash" -Benutzern, der damit etwas zu tun haben könnte. Weil es keine Möglichkeit gibt, sauberer zu sein. –

+0

tatsächlich gibt es. Mit lodash können Sie einfach schreiben 'var results = _.map (Einladungen, 'Ereignisse');' –

-1

Versuchen Sie, diese ich es hoffe funktioniert:

Hier müssen wir die invitations Array zweimal durchlaufen die Ereignisse Array-Elemente zu erhalten und erstellt ein neues Array nach der Anforderung.

Arbeits Demo:

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>

+0

Während das funktioniert, hat er nach Lösungen * ohne * verschachtelte For-Loops gefragt. – Stan

Verwandte Themen