javascript - 检查 JavaScript 对象中的多个键?
问题描述
是否有用于一次检查多个键的本机或库函数?
说这是我的对象:
const foo = {};
foo.superLongNameNeededByPackage = {cat: {black: 1}, hat: 2, bat:3, mat: 12}
console.log(foo);
// { superLongNameNeededByPackage : {cat: {black: 1}, hat: 2, bat:3, mat: 12} }
我想检查它上面是否有各种键,如果有办法做到这一点?
const isReadyForHalloween = hasMultipleKeys(foo.superLongNameNeededByPackage,
['cat.black', 'hat', 'bat']);
我知道lodashhas
以及我可以编写自己的使用的事实Object.keys
,every
但我希望尽可能避免它,因为它仍然会感觉过于冗长并且需要写出完整的公式。
const arr = Object.keys(foo.superLongNameNeededByPackage);
arr.every(item => item.hasOwnProperty("a")
&& item.hasOwnProperty("b")
&& item.hasOwnProperty("c") );
但我不想hasOwnProperty
每次都写出来,可能想提供我的密钥列表作为它自己的变量。
解决方案
您可以采用两个功能,一个检查路径,另一个检查是否所有键都在对象中。
function has(object, path) {
return path.split('.').every(k => object.hasOwnProperty(k) && (object = object[k]));
}
function hasMultipleKeys(object, keys) {
return keys.every(has.bind(null, object));
}
const foo = {};
foo.superLongNameNeededByPackage = { cat: { black: 1 }, hat: 2, bat: 3, mat: 12 };
const isReadyForHalloween = hasMultipleKeys(foo.superLongNameNeededByPackage, ['cat.black', 'hat', 'bat']);
console.log(isReadyForHalloween);
推荐阅读
- ios - 如何快速从邮政编码获取坐标
- mariadb - mariadb-java-client 2.2.3 是否与 MySQL 8.0 兼容?
- delphi - 颜色 Listbox.Item[N] 其中 N 由代码生成
- reactjs - Reactjs:如何在 reactjs 中合并前端网站和管理面板?
- javascript - Jquery pickatime:设置值时调用javascript函数
- android - 在循环中查询firebase HTTPs函数只会多次调用最后一次调用
- java - 创建war文件时无法访问jar文件
- amazon-web-services - 为什么即使请求者是存储桶所有者,Amazon S3 也会评估存储桶策略?
- postgresql - 计算离散值的连续出现次数
- react-native - React Native : Change targeted sdk version for play store upload