我有这个对象:
values = {page: "0", length: "12"}
我想检查键是否具有page
和length
,所以我想出了使用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')
?
答案 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>