javascript - 检查 JavaScript 对象中的多个键?

标签 javascript lodash

是否有用于一次检查多个键的 native 或库函数?

说这是我的对象:

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

我知道 lodash's has以及我可以自己编写 using Object.keys and every 的事实但我希望尽可能避免它,因为它仍然会让人觉得过于冗长并且需要写出完整的公式。

const arr = Object.keys(foo.superLongNameNeededByPackage);
arr.every(item => item.hasOwnProperty("a")
               && item.hasOwnProperty("b")
               && item.hasOwnProperty("c") );

但我不想每次都写出 hasOwnProperty,并且可能想提供我的 key 列表作为它自己的变量。

最佳答案

您可以采用两个函数,一个用于检查路径,另一个用于检查对象中是否包含所有键。

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

关于javascript - 检查 JavaScript 对象中的多个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58167055/

相关文章:

javascript - 仅在需要时加载外部 JavaScript

javascript - .reduce() 函数如何与 Javascript 中的 Math.max() 一起使用?

javascript - Lodash 根据提供的比较器排序

javascript - 使用 lodash 将对象转换为数组

node.js - lodash _.map 比 Node.js map 快吗?

javascript - 在javascript中比较数组与对象键和组

javascript - 将 C# 方法运行到 javascript 中

javascript - CSS 没有链接到 HTML

javascript - 如何根据客户位置更改时区

javascript - 在 javascript 中映射对象数组并按键分组