2016-11-28 3 views
-1

Hier ist ein Beispiel für einen Code, der ein Array von Objekten für einfache, beliebige Daten verwendet.return object values ​​mit const 1 liner

konstante Funktion am unteren Rand meiner Flugnummer vertreten zu finden, wie flightNu

var flights = [{ 
     "id": 1234, 
     "airline": "Delta", 
     "depart": "11/23/2016 10:25 AM", 
     "arrive": "11/23/2016 11:35 AM", 
     "from": "TPA", 
     "to": "MEM" 
    }, { 
     "id": 4321, 
     "airline": "AA", 
     "depart": "11/23/2016 12:25 PM", 
     "arrive": "11/23/2016 2:35 PM", 
     "from": "DWF", 
     "to": "SEA" 
    }] 

var flightNu = 4321; 

const flightDetails = (a) => 
a.map(f => (f.id == flightNu) ? f : null) 


console.log(flightDetails(flights)) 

So liegt meine Frage mit richtig definieren diese konstante Funktion

const flightDetails = (a) => 
a.map(f => (f.id == flightNu) ? f : null) 

Dies kehrt [null, Object] Objekt ist die korrekte eins, mit FlugNu. Ich fand es, cool, aber sagen wir, ich füge 100 Objekte hinzu, das wären 99 Nullen. Das sind 99 Probleme, aber eine passende Flugnummer ist keine. (Entschuldigung)

Kann jemand etwas Licht auf eine gute Möglichkeit werfen, dies zu verwenden? Vielleicht sollte ich keinen ternären Operator verwenden. Wenn ich die richtige f[index] zurückgeben könnte, wäre das großartig.

Vorzugsweise ohne Objekt in anderen Variablen zugewiesen

var MatchingFlight; 

const flightDetails = (a) => 
a.map(f => { 
    if (f.id === flightNu){ 
       MatchingFlight = f; 
    } 
}) ? MatchingFlight : null //returns Object {} close but meh 

Dieser Code-Schnipsel in dem vorgeschlagenen Ziel, Sinn funktioniert, aber die Definition MatchingFlight außerhalb des Bereichs für const scheint nicht richtig.

+2

Wenn Sie das erste Spiel, verwenden Sie '.find()' statt '.map()'. –

+4

anstelle von 'map' verwenden' filter'. – abhishekkannojia

+0

@torazaburo Nun, ich habe das Update für ein Szenario hinzugefügt, das funktioniert, Es gibt andere Schnipsel, die funktionieren, aber die wahre Antwort ist SLaks mit 3 möglichen Methoden, die kein Snippet ist, also wollte ich nur mit einem möglichen Ausschnitt für die Vollständigkeit aktualisieren – teachtyler

Antwort

0

Sie können filter in JavaScript verwenden, die die Elemente zurückgibt, die den Filter so etwas wie dieses Spiel

const flightDetails = (a) => 
a.filter(f => (f.id == flightNu)) 
+0

Ich spielte mit Filter herum und kam mit der gleichen Sache ziemlich zurück, außer dass ich dieses Mal keinen ternären Operator verwendete. Sollte ich oder ist es wichtig? – teachtyler

+0

Es hängt davon ab, manchmal, wenn das Objekt nicht definiert ist, können wir den ternären Operator verwenden, denn wenn es fehlschlägt, weisen wir es dem Wert null zu. Andernfalls ist es nicht notwendig, den ternären Operator zu verwenden. Hoffe das hilft. Beantwortete deine Frage? – Ajaykumar

4

map() verwandelt jedes Element in etwas anderes. Das ist nicht was du willst.

Sie wollen filter() (welche gibt nur passende Elemente) oder find() (die das erste Spiel zurückkehrt), nicht map().

+0

'find()' wäre in bestimmten Fällen gut, aber da 'filter()' ein Array zurückgibt und sagen wir, dass mehrere Flugnummern für Argumente gefunden werden, dann funktioniert das in diesem Fall ziemlich gut. – teachtyler