【问题标题】:Lodash: _.has check for keys returning falseLodash:_.has 检查返回 false 的键
【发布时间】:2018-10-22 16:48:17
【问题描述】:

我有这个对象:

values = {page: "0", length: "12"}

我想检查密钥是否有pagelength 所以我想出了这个解决方案使用Lodash

has(values, 'page') && has(values, 'length')

这按预期返回 true,但我想使用更简写的方法并尝试:

has(values, ['page', 'length]') 但这会返回 false。知道为什么吗?

https://lodash.com/docs/4.17.10#has

Lodash 有一个返回 true 的示例:

var object = { 'a': { 'b': 2 } };

_.has(object, 'a');
// => true

_.has(object, 'a.b');
// => true

_.has(object, ['a', 'b']);
// => true

有没有更优雅的方法来检查我的对象中的键,或者我应该保持我的解决方案原来的样子:has(values, 'page') && has(values, 'length')

【问题讨论】:

  • _.has(object, path) <- 你读过path这个词吗?基本上,lodash 将使用该路径遍历对象。
  • 另外,"0" 值可能被视为false 而不是数字 0。最后,您的长度值也被视为字符串,这可能会导致细微的转换问题还有
  • 啊,我明白了,谢谢.. 是的,不幸的是我从后端获取这些值,所以我需要解析字符串值

标签: javascript object key lodash


【解决方案1】:

_.has(object, path)<-你读过路径这个词吗?基本上,lodash 将使用该路径遍历对象。

我认为你可以使用 vanilla javascript 来做到这一点:

let values = { page: "0", length: "12" },
    keys = Object.keys(values),
    result = ['page', 'length'].every(k => keys.includes(k));
    
console.log(result);

使用 lodash

let values = { page: "0", length: "12" },
    keys = _.keys(values),
    result = _.every(['page', 'length'], k => _.includes(keys, k));
        
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

【讨论】:

    【解决方案2】:

    您可以使用_.at() 从对象中提取值,然后将结果的长度与原始键数进行比较:

    var values = {page: "0", length: "12"}
    
    const hasKeys = (obj, keys) => _.eq(_.at(obj, keys).length, keys.length);
    
    console.log(hasKeys(values, ['page', 'length']));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 2015-05-14
      • 1970-01-01
      • 2011-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-17
      相关资源
      最近更新 更多