使用对角线或下划线检查对象是否只有给定键

2022-03-09 00:00:00 object javascript underscore.js lodash

是否有对角线或下划线方法可以确定对象是否只具有该对象的给定键。我希望使用Lodash或下划线实现,即使使用本机JS这听起来微不足道。

例如,如果我的对象如下所示,并且假设有一个名为hasOnly的lodash方法

const obj = {
    name: undefined,
  age: 15,
  school: 'Some school'
}

_.hasOnly(obj,['name','age']) //return false

_.hasOnly(obj,['name','age','city']) //return false

_.hasOnly(obj,['name','age','school']) //return true

我似乎在文档中找不到方法


解决方案

快速下流:

hasOnly = (obj, props) => _.isEqual(_.keys(obj).sort(), props.sort())

之所以进行排序,是因为我们正在比较数组。

作为另一种选择,可以将props_.keys(obj)都转换为对象,其中props_.keys(obj)是键,而值是始终相同的虚拟值,例如1。执行此操作的函数可能如下所示:

make1ValuedObj = keys => _.zipObject(keys, Array(keys.length).fill(1))

然后,用户可以将这些内容传递给_.isEqual,而无需对任何内容进行排序:

hasOnly = (obj, props) => _.isEqual(make1ValuedObj(_.keys(obj)), make1ValuedObj(props))

实际情况是,在构造对象时必须进行一种&q;排序,因此我认为与上面的解决方案相比没有什么真正的优势。

相关文章