JavaScript - 检查对象是否为空

27

我正在尝试创建JavaScript/jQuery测试来检查我的对象是否为空,但无法弄清楚。

这是当对象里面有东西时的样子:

{"mergedSellerArray":{"key1114":"1120"}}

这是空对象时的样子:

{"mergedSellerArray":{}}

这是我基于另一个SO答案的当前测试,但它不起作用:

var sellers = JSON.stringify({mergedSellerArray});
if(Object.keys(sellers).length === 0 && sellers.constructor === Object) {
    console.log("sellers is empty!");
}

2
什么是sellers - stackoverfloweth
1
如果sellers是外部对象,那么它不是空的,你需要编写一些代码来检查它是否符合你期望的状态。 - zzzzBov
测试构造函数有什么意义? - Pointy
在卖方声明中添加 - dmikester1
2
JSON.stringify()将对象转换为字符串,正如名称所示。那么sellers变量的作用是什么呢?为什么不能直接检查mergedSellerArray呢? - JJJ
显示剩余3条评论
5个回答

48

您正在测试sellers,但它不是空的,因为它包含mergedSellerArray。您需要测试sellers.mergedSellerArray

let sellers = {
  "mergedSellerArray": {}
};
if (Object.keys(sellers.mergedSellerArray).length === 0 && sellers.mergedSellerArray.constructor === Object) {
  console.log("sellers is empty!");
} else {
  console.log("sellers is not empty !");
}


1
因性能而被踩下。整个对象通过使用“Object.keys”映射到数组中,它需要O(n)或更差的时间复杂度(取决于哈希实现),我认为这对于简单的“isEmpty”检查来说是相当不负责任的。一个 O(1) 的实现如下:let hasNoKeys = obj => { for (let k in obj) return false; return true; } - Gershom Maes

4

这是 jQuery 中的代码:

$(document).ready(function(){
  var obj={"mergedSellerArray":{}};
  alert("is empty: "+$.isEmptyObject(obj.mergedSellerArray));

  var obj2={"mergedSellerArray":{"key1114":"1120"}};
  alert("is empty: "+$.isEmptyObject(obj2.mergedSellerArray));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" />

jsfidle: https://jsfiddle.net/nyqgbp38/


7
整个 jQuery 库来测试一个对象是否为空?! - Ohgodwhy
2
提到了使用jQuery的解决方案。谢谢。 - sharif2008

4

这将在现代 web 浏览器中工作。它非常简单易懂

const empty = {};
if(Object.keys(empty).length === 0 && empty.constructor === Object) {
    console.log("Object is empty");
} else {
    console.log("Object is not empty");
}

4

如果您正在使用lodash库,则有一种优雅的方式来检查空对象、数组、映射或集合。我假设您已经知道ES6导入语句。

import {isEmpty} from "lodash"

let obj = {};
console.log(isEmpty(obj)); //Outputs true.

let arr = [];
console.log(isEmpty(arr)); //Outputs true.

obj.name="javascript";
console.log(isEmpty(obj)); //Outputs false.

因此,针对您的代码,
isEmpty(mergedSellerArray); //will return true if object is not empty.

希望这个答案有所帮助。

2
可以创建辅助函数:
const isEmpty = inputObject => {
  return Object.keys(inputObject).length === 0;
};

可以这样使用:
let inputObject = {};
console.log(isEmpty(inputObject))  // true.

and

inputObject = {name: "xyz"}; 
console.log(isEmpty(inputObject)) // false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接