2016-11-10 2 views
4

У меня есть следующиеИспользование Lodash `_.get` для доступа ключ объекта с использованием брекет обозначения

const key = 'foo'; 
const test = { foo: { bar: 23 } }; 

, и я хотел бы использовать lodash get для доступа к значению test[key].bar.

Я хочу использовать кронштейн обозначения на первом индикаторе ...

_.get(test, '[key].bar'); // results in undefined 

Конечно, есть способ ...

+0

Ваш первый пример не работает для меня. Я сомневаюсь, что lodash использует eval здесь. – Scimonster

+0

спасибо @scimonster. Я думал, что тестировал это, но я также вижу, что он сейчас не работает ... удалит – sfletche

ответ

7

Вам нужно поставить значение из key в вашу строку пути :

_.get(test, key + '.bar'); 

В ES2015 можно использовать template literal (интерполированное строку):

_.get(test, `${key}.bar`); 
+0

Что делать, если 'key' не является юридическим идентификатором? – Scimonster

+1

@Scimonster Если я понимаю вопрос, это не проблема: http://jsbin.com/xuyiyiroto/edit?html,js,console – joews

5

Вы можете передать массив для определения пути оценки.

Это один довольно чистое решение вашей проблемы:

const test = {foo: {bar: 23}} 
 
const key = 'foo' 
 

 
console.log(_.get(test, [key, 'bar'])) // 23
<script src='https://cdn.jsdelivr.net/lodash/4.16.6/lodash.min.js'></script>

0
const test = { foo: { bar: 23 } }; 
const key = 'foo'; 
const search = key + '.bar'; 

const result = _get(test, search); 
+0

Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (http : //meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. – VDWWD

0

Это предложение, которое использует глобальную переменную, когда заключенный в квадратные скобки.

function getValue(object, path) { 
 
    return path.replace(/(?=\[)/g, '.').split('.').reduce(function (o, k) { 
 
     var m = k.match(/^\[([^\]]*)\]$/); 
 
     return m ? (o || {})[window[m[1]]] : (o || {})[k]; 
 
    }, object); 
 
} 
 

 
var test = { foo: { bar: 23 } }, 
 
    key = 'bar'; 
 

 
console.log(getValue(test, 'foo[key]'));