2016-11-10 1 views
4

를 사용하여 객체 키에 액세스 할 수 있습니다.내가</p> <pre><code>const key = 'foo'; const test = { foo: { bar: 23 } }; </code></pre> <p>따라하고 내가 <code>test[key].bar</code>의 값에 액세스 할 수 <code>get</code>을 lodash 사용하고 싶습니다 대괄호 표기법

내가 제 1 지시에 브래킷 표기법을 사용하려면 ...

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

은 확실히 당신은 당신의 경로 문자열로 key을 둘 필요가

+0

첫 번째 예는 나를 위해 작동하지 않습니다. 나는 lodash가 여기에 eval을 사용하는지는 의심 스럽다. 감사합니다 @scimonster. – Scimonster

+0

. 나는 그것을 테스트했다고 생각했지만, 현재 작동하지 않는 것을 볼 수 있습니다 ... – sfletche

답변

7

... 방법있다 :

_.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] 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]'));