Lodash:_.has检查键是否返回false

时间:2018-10-22 16:48:17

标签: javascript object key lodash

我有这个对象:

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

我想检查键是否具有pagelength,所以我想出了使用Lodash的解决方案:

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

此返回的结果符合预期,但我想使用更简捷的方法并尝试:

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

2 个答案:

答案 0 :(得分:2)

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

我认为您可以使用香草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>

答案 1 :(得分:0)

您可以使用_.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>