У меня есть следующий объектJavascript - получить объект собственности путь
var obj = {};
obj.foo = {};
obj.foo.bar = "I want this";
дал «путь» "foo.bar"
в виде строки, как я получить obj.foo.bar
(или obj[foo][bar]
)?
У меня есть следующий объектJavascript - получить объект собственности путь
var obj = {};
obj.foo = {};
obj.foo.bar = "I want this";
дал «путь» "foo.bar"
в виде строки, как я получить obj.foo.bar
(или obj[foo][bar]
)?
Вот способ:
function getKey(key, obj) {
return key.split('.').reduce(function(a,b){
return a && a[b];
}, obj);
}
getKey('foo.bar', obj); //=> "I want this"
Приятная идея! Только одно: если одно свойство в «пути» не определено, это вызовет TypeError. Я предлагаю вам улучшить это, изменив 'return a [b]', чтобы возвратить && a [b] '. Таким образом, в этой ситуации getKey возвращает 'undefined', который чувствует себя лучше –
@Tobo: попробуйте с несуществующим ключом, он должен просто вернуть' undefined' as-is. – elclanrs
О, я вижу, если вы вводите два в строке, которые несуществуют, это вызовет ошибку. Ред. – elclanrs
просто использовать obj.foo.bar..that будет работать;
Это не то, что он просит. Он спрашивает, как получить доступ к свойству объекта со строкой «foo.bar». – CharliePrynn
если path = "foo.bar"
то вы можете написать
var keys = path.split('.');
console.log(obj[keys[0]][keys[1]]);
Другой способ:
function resolve(root, path){
try {
return (new Function(
'root', 'return root.' + path + ';'
))(root);
} catch (e) {}
}
resolve(obj, 'foo.bar'); // "I want this"
Подробнее об этом: https://stackoverflow.com/a/18381564/1636522
'OBJ [Foo] [бар]' это то, что вы хотите? . Так это сработает для вас –
да, я добавляю, что на вопрос –
вы получаете свойство 'bar' так же, как вы его инициализировали, и назначили строку val ue к нему: 'var myString = obj.foo.bar;' – tikider