🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

给定的多层键是否存在 JSON 对象中

2020-07-23

描述

如果一个 JSON 对象中存在给定的目标键值就返回 true,否则的话返回 false

提示

  • 首先检查给定的 keys 是否为一个非空数组,如果为空的话,则提前返回 false
  • 使用 Array.prototype.every() 按顺序依次检查给定的每一个键是否都存在于 obj 对象的深层次中
  • 使用 Object.prototype.hasOwnProperty() 检查 obj 是否没有拥有当前的键,使用 typeof 检测 obj 是否不是一个对象。如果满足其中任意一种情况,则停止解析,返回 false
  • 否则将键值赋值给 obj,以便在下一次迭代中继续使用

代码

const hasKey = (obj, keys) => {
  return (
    keys.length > 0 &&
    keys.every(key => {
      if (typeof obj !== 'object' || !obj.hasOwnProperty(key)) return false;
      obj = obj[key];
      return true;
    })
  );
};

示例

检测 JSON 对象中是否存在指定的多层键:

let obj = {
  a: 1,
  b: { c: 4 },
  'b.d': 5
};
hasKey(obj, ['a']);  // true
hasKey(obj, ['b']);  // true
hasKey(obj, ['b', 'c']);  // true
hasKey(obj, ['b.d']);  // true
hasKey(obj, ['d']);  // false
hasKey(obj, ['c']);  // false
hasKey(obj, ['b', 'f']);  // false

返回总目录

每天 30 秒系列之 JavaScript 代码


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步