判断对象是否为空

简介: 判断对象是否为空

说在前面

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

问题描述

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

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

你可以假设对象或数组是通过 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
1月前
|
Python
晶闸管阴阳极的判断
晶闸管阴阳极的判断
38 0
|
1月前
|
算法 前端开发
3039. 进行操作使字符串为空
3039. 进行操作使字符串为空
26 0
|
20天前
|
C++
c++判断
c++判断
20 1
|
20天前
|
C语言
C判断
C判断
19 0
|
26天前
|
存储 C++
C++ 判断
C++ 判断
23 0
|
7月前
判断Object对象是否为空
判断Object对象是否为空
|
8月前
|
程序员 C语言
C 判断
C 判断。
32 0
|
前端开发
你真的会判断对象是否为空吗?
一个小小的判空,却很可能让你吃了大亏,如果一个判空没有做好,那么里面的逻辑就完全裸露了,相信你一定吃过 `NullPointerException` 的苦头!
|
索引
判断字符串回文
判断字符串回文
44 0
|
程序员 C++
用C++如何进行判断
用C++如何进行判断

热门文章

最新文章