判断对象是否为空

2023-12-20

说在前面

????不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

问题描述

给定一个对象或数组,判断它是否为空。

  • 一个空对象不包含任何键值对。
  • 一个空数组不包含任何元素。

你可以假设对象或数组是通过 JSON.parse 解析得到的。

示例 1:

输入: obj = {"x": 5, "y": 42}
输出: false
解释: The object has 2 key-value pairs so it is not empty.

示例 2:

输入: obj = {}
输出: true
解释: The object doesn't have any key-value pairs so it is empty.

示例 3:

输入: obj = [null, false, 0]
输出: false
解释: The array has 3 elements so it is not empty.

提示:

  • 2 <= JSON.stringify(obj).length <= 105

你可以在 O(1) 时间复杂度内解决这个问题吗?

思路分析

首先我们应该要先理解一下题目意思,题目会给我们一个对象或数组 obj ,我们需要判断其是不是一个空数组或空对象。数组为空我们很容易判断,我们只需要判断数组长度是不是为空就可以,那对象呢?空对象的意思是不包含任何键值对。所以我们只需要判断对象是否有包含键值对就可以。

判断是否为数组:

Array.isArray(obj)

数组直接判断长度是否为0即可:

if(Array.isArray(obj)){
    return obj.length == 0;
}

获取对象键值数组:

Object.keys(obj)

判断对象键值数量是否为0:

return Object.keys(obj).length == 0;

做到这里再回头想想,数组好像也是一个对象吧?

typeof [] //'object'

那么数组是不是也可以直接用 Object.keys(obj) 来获取数组的键值:

let arr = [1,2,3,4,5,6]
Object.keys(arr) // ["0", "1", "2", "3", "4", "5"]

通过测试后我们发现处理数组时,会返回索引值数组,所以我们也可以直接用 Object.keys(obj) 来判断数组是否为空,这样就不用区分判断数组和对象了:

return Object.keys(obj).length == 0;

AC 代码

完整 AC 代码如下:

/**
 * @param {Object | Array} obj
 * @return {boolean}
 */
var isEmpty = function (obj) {
  return Object.keys(obj).length == 0;
};

公众号

关注公众号『 前端也能这么有趣 』,获取更多有趣内容。

说在后面

???? 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 ???? ,平时也喜欢写些东西,既为自己记录 ????,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 ????,写错的地方望指出,定会认真改进 ????,偶尔也会在自己的公众号『 前端也能这么有趣 』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 ????。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

判断对象是否为空 的相关文章

  • 在 Javascript 中用序列号映射数组

    下面的代码 let myArray Array apply null length 10 map Number call Number 创建以下数组 0 1 2 3 4 5 6 7 8 9 我只是不明白为什么 我在互联网上找不到任何解释这种
  • Jquery - 如何替换div中的一个单词?

    我有一个从其他位置复制的 div 我需要更改其中的一个单词 这是 HTML div class dealer addy 8726 N Royal Ln br Irving TX 75063 br email protected cdn cg
  • Google Closure 和生成的 getter/setter

    我正在尝试让 KineticJS 与 Google Closure Compiler 一起使用 然而 KineticJS 根据变量的名称生成它的 getter 和 setter 像这样的事情 add getter and setter me
  • 使用 Passport 进行 Node.js 身份验证:如果字段丢失,如何闪烁消息?

    我正在使用 Passport js 如果我的表单字段为空 我想显示一条消息 但我不知道该怎么做 因为如果缺少护照 则不会触发策略回调 我真的希望这个用例更加清晰 而且我不想修改护照 我感觉有办法 但不知道在哪里 我尝试使用路线的回调 app
  • 范围滑块 javascript 以小时和分钟为单位

    我试图分别以小时和分钟为单位显示滑块的值 我对 JS 还很陌生 并且仍在尝试了解它是如何工作的 到目前为止 我所拥有的是一个工作滑块 其最大值为 1440 24 小时内的分钟 在 JS 中 我尝试将其划分为小时和分钟 并使用 innerHt
  • 系统js语法错误,IE11

    我有一个 Angular 2 应用程序可以在 Firefox 和 Chrome 中工作 但在 IE 中却没有那么多工作 根据我的堆栈跟踪 我的 System js 设置似乎存在问题 这是我在网络控制台中看到的错误描述 Error Syste
  • 请使用同一按钮播放和暂停音频

    我有这段代码并且只是播放 但我想使用相同的按钮 图像 播放和暂停 并且我不知道我需要添加什么 我需要做什么 请帮帮我
  • 切换 Ag-Grid 中的浮动过滤器?

    我试图通过开关或按钮单击来确定浮动过滤器的显示 看起来很简单 我应该能够在 true 和 false 之间切换 将该值提供给网格选项中的浮动过滤器 然后刷新标题 对吗 不幸的是 网格似乎总是落后一步 当我第一次点击时 什么也没有发生 当我将
  • 将 Babel 与单个输出文件和 ES6 模块一起使用

    这是我的 gulp 任务 将 ES6 代码编译成单个 ES5 文件 我使用类和模块 import export 在 ES6 中 gulp src paths scripts pipe sourcemaps init pipe babel p
  • 停止倒数计时器 Javascript onClick

    给出以下代码 myButton02 click function myButton02 hide counter animate width toggle var count 65 var counter setInterval timer
  • Angularjs 使用 ng-init 为 ng-model 赋值

    您好 我有以下问题 看起来很简单并且应该有效 但事实并非如此 在我的代码中我输入了
  • pointdown 与 onclick:有什么区别?

    两者有什么区别onpointerdown and onclick事件处理程序 有任何实际差异吗 事件在 DOM 树上传播的方式不一样吗 是否有一些设备仅响应这些事件之一 我最初以为这只是pointerdown在触摸设备或笔中触发 但是onc
  • 我以为我了解范围

    有人可以告诉我为什么 x 的最后一次记录等于0而不是1 我想因为它是在函数之外声明的 所以它具有全局范围 然后在函数中它的值设置为1并且该值将保持原样一个全球性的 我知道函数内的第一个 x 值是全局的 因为没有 var 关键字声明的任何变量
  • Firebase 停止监听 onAuthStateChanged

    从版本 3 0 0 开始 我很难删除身份验证状态更改侦听器 要根据文档启动侦听器 firebase auth onAuthStateChanged function user handle it 但是 我在文档中找不到任何涉及删除身份验证状
  • 将变量从一个 jsp 发送到另一个 jsp

    我有一个 JSP 文件jsp 1 jsp和另一个 JSP 文件jsp 2 jsp 我已经包括了jsp 2 jsp in jsp 1 jsp using 现在我需要某个元素上的单击事件 在该事件中 我想将字符串变量传输到包含的 jsp 中 假
  • 如何在从数据库异步加载中用占位符替换不存在的图像

    我有一个包含图像的数据库 我需要根据用户的请求即时加载这些图像 这些图像将作为包含 div 容器中的单独 s 的背景图像 类似于图像滚动条 该数据库当前是本地数据库 但这不是我的问题 问题是数据库可能没有我请求的所有图像 并且我可能会得到一
  • ag-Grid 中的行格式

    我们需要有条件地将行文本设置为粗体 目前它仅适用于单个单元格 但我们需要在所有列单元格上应用文本粗体 应用格式设置后 isBold 列必须隐藏 删除 此列仅用于格式化 如何应用文本缩进 10px isBold 列包含真实值的第一列的 有可能
  • 当 JavaScript 抛出异常时不要停止它

    我正在使用 JavaScript 编写一个 Windows 边栏小工具 现在我想捕获所有 JavaScript 异常并将其记录到文本文件中 一个问题是 当任何一行抛出异常时 下一行将不会被执行 是否可以自动捕获异常 以便执行以下 JavaS
  • 什么是标志变量?

    最近我遇到了标志变量 但我不知道它们的作用 我不太确定何时使用标志变量以及如何使用它 我用 Google 搜索了它 但没有任何与我的上下文 JavaScript 相关的具体示例 标记变量的定义和使用 http www javascriptk
  • 如何防止外部 CSS 添加和覆盖 ReactJS 组件样式

    我有一个自定义的 ReactJS 组件 我想以某种方式设置样式 并将其作为插件提供给许多不同的网站 但是 当网站使用全局样式 Twitter bootstrap 或其他 css 框架 时 它会添加并覆盖我的组件的样式 例如 全局 css l

随机推荐

  • nodejs微信小程序+python+PHP的大学生社会实践申报系统-计算机毕业设计推荐

    系统主要包括首页 个人中心 项目分类管理 学生管理 教师管理 学生活动申报管理 社会实践活动管理 活动报名申请管理 系统管理等功能模块 根据需求分析制定模块并设计数据库结构 大学生社会实践申报系统的需求和管理上的不断提升 大学生社会实践申报
  • nodejs+vue+微信小程序+python+PHP协同过滤算法的电影推荐系统-计算机毕业设计推荐python

    信息数据的处理完全依赖人工进行操作 会耗费大量的人工成本 特别是面对大量的数据信息时 传统人工操作不仅不能对数据的出错率进行保证 所以电子化信息管理的出现就能缓解以及改变传统人工方式面临的处境 一方面可以确保信息数据在短时间被高效处理 还能
  • 学术编辑青睐《乡村振兴战略下传统村落文化旅游设计》期货刊印辉少许

    学术编辑青睐 乡村振兴战略下传统村落文化旅游设计 期货刊印辉少许 学术编辑青睐 乡村振兴战略下传统村落文化旅游设计 期货刊印辉少许
  • 力扣面试题 16.19. 水域大小(java DFS解法)

    Problem 面试题 16 19 水域大小 文章目录 题目描述 思路 解题方法 复杂度 Code 题目描述 思路 该问题可以归纳为一类 遍历二维矩阵 的题目 此类中的一部分题目可以利用 DFS 来解决 具体到本题目 该题目可以的写法大体不
  • Java 基础学习(十四)Map集合与Set集合

    1 Map集合 1 1 Map接口 1 1 1 Map接口概述 Map接口是一种双列集合 Map的每个元素都包含一个键对象Key和一个值对象Value 键对象和值对象之间存在对应关系 这种关系称为映射 Mapping Map接口中的元素 可
  • Android 12.0 Launcher3定制化之动态日历图标功能实现

    1 概述 在12 0的系统产品rom开发中 在Launcher3中的相关定制化功能中 对于一些产品要求需要动态日历图标功能 在日期改变的时候 日历图标也需要跟着改变 所以需要自定义日历图标 监听日历改变的广播 收到日期改变的广播后 刷新日历
  • 计算机网络 网络层下 | IPv6 路由选择协议,P多播,虚拟专用网络VPN,MPLS多协议标签

    文章目录 5 IPv6 5 1 组成 5 2 IPv6地址 5 3 从IPv4向IPv6过渡 5 3 1 双协议栈 5 3 2 隧道技术 6 因特网的
  • 每天都很煎熬,领导派的活太难,真的想跑路了

    每天都很煎熬 领导派的活太难 真的想跑路了 人在江湖身不由己 无论是领导的亲信还是团队的边缘 都可能遇到这种情况 不得不干一件特别难以推进的事情 茫然无措 不知如何推进 每天陷入焦虑和自我怀疑中 这种事情一般有一些共同特点 结果和目标极其模
  • 创建个人网站(二)前端主页设计和编写一(太阳移动)

    前言 以下内容纯纯当乐子来看就行 知识分享一下这样设计的原因 想看正文直接见下一节 为什么创建个人网站一之后几天没有动静了呢 一个是家里有事实在比较忙 第二个原因是没想到主页要设计成什么样 知道前两天问我姐什么样的主页比较炫酷 我们得出的结
  • 网工内推 | 美团、中通快递,网络运维,最高30K*15薪

    01 美团 招聘岗位 网络运维开发工程师 职责描述 1 负责新零售业务门店 仓库网络的日常运维 故障处理 应急响应 保障网络及相关业务的稳定运行 处理突发事件 对疑难问题进行跟踪并最终解决 2 负责新零售业务门店 仓库网络的建设和运维 对涉
  • 软件测试/测试开发|Ubuntu系统常用文件管理命令详解

    前言 Ubuntu是一种广泛使用的Linux操作系统 提供了丰富而强大的文件管理命令 使用户能够通过命令行轻松管理文件和目录 本文将介绍一些常用的Ubuntu文件管理命令 帮助用户更好地理解和利用系统资源 ls 列出目录内容 ls 选项 目
  • vue-springboot美食菜谱分享平台in9c2

    1 以人为本原则 这个厨房达人美食分享平台 它的本质是为人们服务 是希望其可以实现并满足广大使用者对科技时代下的厨房达人美食分享平台的憧憬与向往 如何解放需要人工才能完成的部分和提升使用者的使用观感是最为基础的也是最重要的 它的设计宗旨就是
  • 基于FPGA的简易BPSK和QPSK

    1 框图 2 顶层 3 m generator M序列的生成 输出速率为500Kbps 4 S2P是串并转换模块 将1bit的m序列转换到50M时钟下的2bit M序列数据 就有4个象限 5 my pll是生成256M的时钟作为载波 因为s
  • 线上环境如何正确配置 Django 的 DEBUG?

    Author rab Django Version 3 2 Python Version 3 9 目录 前言 一 DEBUG True 二 DEBUG False 三 页面异常解决 总结
  • 全网最全pytest大型攻略,单元测试学这就够了

    pytest 是一款以python为开发语言的第三方测试 主要特点如下 比自带的 unittest 更简洁高效 兼容 unittest框架 支持参数化 可以更精确的控制要测试的测试用例 丰富的插件 已有300多个各种各样的插件 也可自定义扩
  • nodejs+vue+微信小程序+python+PHP影片数据爬取与数据分析-计算机毕业设计推荐

    管理页面 管理员和用户都可以登录 通过输入账号和密码后 校验无误后方可进入对应的主界面 管理员可对用户使用的权限管理 以及对网站信息进行管理 9 影片数据爬取与数据分析分为两个部分 即管理员和用户 该系统是根据用户的实际需求开发的 贴近生活
  • uniapp-安卓APP开发时使用手机调试

    调试 1 手机打开开发者模式 华为手机举列 gt 设置 gt 关于手机 gt 版本号 多次连续点击 版本号 就会提示 已 打开开发者模式 2 华为手机举列 gt 设置 gt 系统和更新 gt 开发人员选项 gt 打开 USB调试 进入 调试
  • 【Python】练习题

    软文的诗词风将原有文章根据标点符号重新切分成短句并居中排版 对小屏幕阅读十分有利 使用程序将普通文章变成软文的诗词风十分有趣 s 窗前明月光 疑是地上霜 举头望明月 低头思故乡 将字符串按照句号进行分割 sentences s split
  • 新手漏洞挖掘经验分享

    前言 开始之前做个自我介绍 我是来自F0tsec团队的Subs 也是刚接触安全没有多久的菜狗 刚趁着安全客推荐的平台活动 尝试了三天漏洞挖掘 我运气挺好的 挖到了四个低危 2个中危 一个严重漏洞 也因此结实了SRC年度榜一榜二的几位大师傅
  • 判断对象是否为空

    说在前面 不知道大家对于算法的学习是一个怎样的心态呢 为了面试还是因为兴趣 不管是出于什么原因 算法学习需要持续保持 问题描述 给定一个对象或数组 判断它是否为空 一个空对象不包含任何键值对 一个空数组不包含任何元素 你可以假设对象或数组是