2016-07-28 6 views
1

Ich mag eine Methode in Javascript, die wie als einen String als Argument und gibt einen Wert von einem verschachtelten Objekt bekommt:Wie verschachtelte Objekte in Javascript durch eine Zeichenkette als Klammernotation erhalten werden?

var obj = { 
 
    place: { 
 
    cuntry: 'Iran', 
 
    city: 'Tehran', 
 
    block: 68, 
 
    info: { 
 
    name :'Saeid', 
 
     age: 22 
 
    } 
 
    } 
 
}; 
 

 
function getValue(st) { 
 
    // st: 'place[info][name]' 
 
    return obj['place']['info']['name'] // or obj.place.info.name 
 
}

+0

Der Parameter 'st' Datenformat, kann es geändert werden? –

+0

Nein das Datenformat von 'st' kann nicht geändert werden :) – SAlidadi

+0

Ich kann' '' nach '[' und vor ']' auch einfügen – SAlidadi

Antwort

1

Eine mögliche Lösung für Ihren Anwendungsfall:

function getValue(st, obj) { 
    return st.replace(/\[([^\]]+)]/g, '.$1').split('.').reduce(function(o, p) { 
     return o[p]; 
    }, obj); 
} 

console.log(getValue('place[info][name]', obj)); // "Saeid" 
console.log(getValue('place.info.age', obj));  // 22 
1

Können Sie Ihre Eingabe in Form von "['a'] ['b'] ['c']" erhalten?

Sie können Transformation auf alle Zeichenfolgen anwenden und das Ergebnis erhalten.

EDIT:

DO Verwenden Sie NICHT Eval direkt im Code-Basis. Es ist böse!

+0

'eval' wird nie die beste Lösung sein leider – VisioN

+0

das ist wahr aber die Frage ist die ungewöhnlichste, die ich gesehen habe – footy

+0

Ich habe solche zuvor gesehen und sogar eine geantwortet: http://Stackoverflow.com/a/13719799/1249581. Lustig, aber ich habe sogar diesen Code in einigen Projekten bei der Arbeit. – VisioN