2016-11-21 3 views
1

Ich habe nach einer netten Möglichkeit gesucht, wirklich verschachtelte Werte zu erhalten, wenn eine der Eigenschaften null oder undefiniert sein kann.Abkürzung für verschachtelte Werte

Beispiel Objekt:

var a = { 
    b: { 
     c: { 
      d: 10 
     } 
    } 
} 

Lassen Sie uns jetzt sagen, dass dies die Struktur ist, dass das Objekt hat, wenn es vollständig aufgefüllt ist, aber manchmal b ist nicht definiert oder c oder sogar d. In Javascript würde ich vielleicht so etwas wie diese zurückgreifen:

var d = a && a.b && a.b.c && a.b.c.d // Now d has value d or some falsy value 

In Immutable.js ich folgendes tun kann (was ich viel mehr sauber zu finden):

var d = a.getIn(['b', 'c', 'd'], null) 

Dies ermöglicht es mir, den Wert abzurufen von d und setze sogar den letzten Parameter als Standardwert, wenn etwas auf dem Weg fehlschlägt.

Kann ich so etwas ähnliches in js tun.

+1

So ein Verfahren machen, die es tut .... reduzieren() ist, was ich verwenden. – epascarello

+1

Nein, es gibt keine integrierte Kurzschrift dafür. Deshalb haben die Leute hinter Immutable.js diese Funktion geschrieben. –

Antwort

4

Sie können das Array mit dem Objekt reduzieren, nachdem Sie Wert und Typ überprüft haben.

function getIn(object, keys, def) { 
 
    return keys.reduce(function (o, k) { 
 
     return o && typeof o === 'object' && k in o ? o[k] : def; 
 
    }, object); 
 
} 
 

 
var a = { b: { c: { d: 10 } } }; 
 

 
console.log(getIn(a, ['b', 'c', 'd'], null)); 
 
console.log(getIn(a, ['b', 'c', 'd', 'e'], null));

+0

es ist wie Sie gemacht haben underscore.js. – Mahi

+0

Ich dachte, es ist mehr als das. –

+0

dann versuchen Sie, neue js zu machen. 'nina.js' – Mahi