2016-11-10 63 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]'));