【力扣】2727. 判断对象是否为空
文章目录
- [【力扣】2727. 判断对象是否为空](#【力扣】2727. 判断对象是否为空)
一、题目
给定一个对象或数组,判断它是否为空。
- 一个空对象不包含任何键值对。
- 一个空数组不包含任何元素。
你可以假设对象或数组是通过 JSON.parse 解析得到的。
示例 1:
输入:obj = {"x": 5, "y": 42}
输出:false
解释:这个对象有两个键值对,所以它不为空。
示例 2:
输入:obj = {}
输出:true
解释:这个对象没有任何键值对,所以它为空。
示例 3:
输入:obj = [null, false, 0]
输出:false
解释:这个数组有 3 个元素,所以它不为空。
提示:
obj是一个有效的 JSON 对象或数组2 <= JSON.stringify(obj).length <= 105
二、解决方案
概述
任务是确定输入的对象或数组是否为空。一个空对象不应包含任何键值对,而一个空数组不应该包含任何元素。输入被假定为 JSON.parse 的输出。
在我们继续之前,首先澄清一些你可能会经常听到的关键点:
JSON: JSON 是一种流行的数据交换格式,它作为 XML 的轻量级替代品。它广泛用于以结构化格式传输和存储数据。JSON 由两种主要数据结构组成:对象和数组。数据表示为键值对的组合,对象用花括号 {} 括起来,数组用方括号 [] 括起来。对象中的键必须是字符串,而值可以是任何有效的 JSON 数据类型,包括对象和数组。
JSON 对象的示例:
json
{
"name": "Pavitr Prabhakar",
"age": 17,
"city": "Mumbattan"
}
JSON 数组的示例:
json
[
"Peter",
"Gwen",
"Miles"
]
JSON.parse() : JSON.parse() 是 JavaScript 中内置的函数,它将 JSON 字符串转换为 JavaScript 对象、数组或原始值(如字符串、数字、布尔或 null)。它以有效的 JSON 字符串作为输入,并返回相应的 JavaScript 对象、数组或原始值。这允许开发人员以本机 JavaScript 格式处理 JSON 数据。
使用 JSON.parse() 的示例:
js
const jsonString = '{"name":"Pavitr Prabhakar","age":17,"city":"Mumbattan"}';
const parsedObject = JSON.parse(jsonString);
console.log(parsedObject.name); // 输出: Pavitr Prabhakar
console.log(parsedObject.age); // 输出: 17
console.log(parsedObject.city); // 输出: Mumbattan
JavaScript 中的对象: 对象用于存储键值对的集合。对象的键可以是可以转换为字符串的任何值,相应的值可以是任何数据类型,包括对象和数组。
使用对象的示例:
js
const person = {
name: "Pavitr Prabhakar",
age: 17,
city: "Mumbattan"
};
console.log(person.name); // 输出: Pavitr Prabhakar
console.log(person.age); // 输出: 17
console.log(person.city); // 输出: Mumbattan
现在如何查找长度或大小?在 JavaScript 中,长度或大小属性用于确定数组中元素的数量或对象中键值对的数量。对于数组,长度属性返回最高数字索引加一。对于对象,长度属性不可用,因此我们需要使用Object.keys()等其他方法来获取键值对的数量。
使用长度属性的示例:
js
const spiders = ["Peter", "Gwen", "Miles"];
console.log(spiders.length); // 输出: 3
const person = {
name: "Pavitr Prabhakar",
age: 17,
city: "Mumbattan"
};
console.log(Object.keys(person).length); // 输出: 3
方法
第一种方法 是使用JSON.stringify将输入数组/对象转换为字符串。如果数组或对象为空,它将返回一个具有开头和结尾的括号或花括号的字符串。
第二种方法 是使用如上建议的Object.keys()来获取长度,然后验证它是否为空。
第三种方法 是仅使用 for 循环迭代器来检查是否有内容可迭代,如果有,表示对象不为空,如果没有可迭代的内容,表示对象为空。
方法 1:使用 JSON.stringify
当你使用JSON.stringify()字符串化一个对象时,结果的 JSON 字符串将以字符串形式表示对象的键值对。在这个上下文中,结果字符串的 "length" 属性将表示字符串中的字符数,而不是原始对象中键值对的数量。
例如,考虑以下对象:
js
const person = {
name: "Pavitr Prabhakar",
age: 17,
city: "Mumbattan"
};
如果使用JSON.stringify()字符串化此对象,它将生成以下 JSON 字符串:
js
{"name":"Pavitr Prabhakar","age":17,"city":"Mumbattan"}
此 JSON 字符串的长度将包括开头和结尾的花括号、引号、冒号和逗号。
因此在我们的情况下,它应该有一个长度为两,即表示开头和结尾的括号/花括号。
js
var isEmpty = function(obj) {
if (JSON.stringify(obj).length <= 2) return true
else return false
};
复杂度分析:
时间复杂度:O(n),其中 n 是对象的大小
空间复杂度:O(n),其中 n 是对象的大小
方法 2:使用 Object.keys
我们可以使用Object.keys()检查键的长度,如果它为 0,则返回 true,否则返回 false。
js
var isEmpty = function(obj) {
return Object.keys(obj).length === 0
};
复杂度分析:
时间复杂度:O(n),其中 n 是对象的大小
空间复杂度:O(n),其中 n 是对象的大小
方法 3:使用循环
如果数组/对象不为空,解释器将进入 for-in 循环,因此将运行第一个返回语句 false。如果为空,解释器将不进入 for-in 循环,因此将执行第二个返回语句 true。
js
var isEmpty = function(obj) {
for (const _ in obj) return false;
return true;
};
复杂度分析:
时间和空间复杂度均为 O(1),因为我们只是检查是否可以进入循环。
时间复杂度: O(1)
空间复杂度: O(1)
面试提示
-
空对象和没有属性的对象有什么区别?
空对象是指不包含任何键值对的对象。这意味着对象不包含任何属性。另一方面,没有属性的对象仍然存在,可能将来会有属性。它只是表示当前没有定义任何属性。
-
如何在 JavaScript 中检查对象是否为空,而不使用其键的长度?
在不使用其键的长度的情况下检查对象是否为空的另一种方法是使用
Object.keys()方法。此方法返回对象自身可枚举属性名(键)的数组。然后,你可以检查数组的长度是否为零,以确定对象是否为空。 -
什么是纯粹的 JavaScript 对象
(POJO)?纯粹的 JavaScript 对象
(POJO)是一个术语,用来描述使用对象字面量语法或Object()构造函数创建的简单 JavaScript 对象。它指的是不具有从自定义原型或内置 JavaScript 类继承的专用行为或方法的对象。POJO 通常用作数据传输对象(DTO)或用于存储和访问数据的简单容器。