【问题标题】:Using Lodash `_.get` to access object key using bracket notation使用 Lodash `_.get` 使用括号表示法访问对象键
【发布时间】:2016-11-10 19:59:24
【问题描述】:

我有以下

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

我想使用 lodash get 来访问 test[key].bar 的值。

我想在第一个指示符上使用括号符号...

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

肯定有办法……

【问题讨论】:

  • 你的第一个例子对我不起作用。我怀疑 lodash 在这里使用 eval。
  • 感谢@scimonster。我以为我已经测试过了,但我也看到它现在不起作用...将删除

标签: javascript lodash


【解决方案1】:

您可以传递一个数组来定义评估路径。

这是解决您的问题的一个非常干净的解决方案:

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>

【讨论】:

    【解决方案2】:

    您需要将key 放入您的路径字符串中:

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

    在 ES2015 中,您可以使用 template literal(内插字符串):

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

    【讨论】:

    【解决方案3】:
    const test = { foo: { bar: 23 } };
    const key = 'foo';
    const search = key + '.bar';
    
    const result = _get(test, search);
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    【解决方案4】:

    这是一个使用全局变量的提案,用括号括起来。

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

    【讨论】:

      【解决方案5】:

      在获取之前解析 JSON JSON.parse(<YOUR JSON String or Obj>)

      const test = { foo: { bar: 23 } };
      const key = 'foo';
      
      
      const result = _get(JSON.parse(test), key );
      

      【讨论】:

        猜你喜欢
        • 2020-10-25
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多