Lodash: _.has 检查返回 false 的键



我有这个对象:

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

你读过 path 这个词_.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);

使用洛达什

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>

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

最新更新