🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->判断对象是否为空
问题描述
给定一个对象或数组,判断它是否为空。
- 一个空对象不包含任何键值对。
- 一个空数组不包含任何元素。
你可以假设对象或数组是通过 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,在此谢谢大家的支持,我们下文再见 🙌。