2016-06-03 5 views
0
var give = 'i.want.it'; 

var obj = { 
    i: { 
     want: { 
      it: 'Oh I know you do...' 
     } 
    } 
}; 

console.log(obj[give]); // 'Oh I know you do...' 

Kann ich irgendwie den Objektstring mit einem Pfad String einer Art erhalten? Ich versuche, eine Beziehung in einer Datenbank zu speichern, in der das Feld nicht in einem eigenen Dokument enthalten sein kann.Zugriff auf JSON-Daten mit Zeichenfolgenpfad?

+1

Werfen Sie einen Blick auf diese: http://goessner.net/articles/JsonPath/ –

+0

@ ADreNaLiNe-DJ Sehr interessant! –

Antwort

2

Verwendung Array#reduce() Methode

var give = 'i.want.it'; 
 

 
var obj = { 
 
    i: { 
 
    want: { 
 
     it: 'Oh I know you do...' 
 
    } 
 
    } 
 
}; 
 

 

 
var res = give.split('.').reduce(function(o, k) { 
 
    return o && o[k]; 
 
}, obj); 
 

 
console.log(res);

0

machen es

var obj = { 
 
    i: { 
 
     want: { 
 
      it: 'Oh I know you do...' 
 
     } 
 
    } 
 
}; 
 
//var result = JSON.parse(JSON.stringify(obj)); //cloning the existing obj 
 
var result = obj; //cloning the existing obj 
 
var give = 'i.want.it'; 
 

 
//now split the give and iterate through keys 
 
give.split(".").forEach(function(key){ 
 
    result = result[key]; 
 
}); 
 
console.log(result);

+0

Hmm hübsch gescheit! Ich werde es ausprobieren und zurückkommen. –

+0

Das Klonen des Objekts ist nicht erforderlich. Es wäre ausreichend, obj einer anderen Referenz zuzuweisen (var result = obj;). – jkordas

+0

@jkordas danke, du hast recht, die Änderungen vorgenommen – gurvinder372

0

Dies funktioniert:

var give = 'i.want.it'; 

var obj = { 
    i: { 
    want: { 
     it: 'Oh I know you do...' 
    } 
    } 
}; 

console.log(eval("obj."+give)); 

Live DEMO JSFiddle

Dies ist eine wirklich einfache Möglichkeit, es zu tun, aber nicht sicher, ich weiß nicht raten Sie es für den professionellen Einsatz zu verwenden. Mit der vorherigen Antwort sehen sie gut aus.

0

Sie können mit eval()

var obj = { "a": { "b": { "c": 3}}}; writeln (eval ('obj.a.b.c') + 2);

Dies wird Ausgang 5.

JavaScript schwach typisiert ist und somit führt es Bewertungsfunktion eine Erklärung sowie einen Ausdruck auswertet.