Javascript 如何检查仅包含空对象[{}]的数组
我有一个变量,如下所示Javascript 如何检查仅包含空对象[{}]的数组,javascript,Javascript,我有一个变量,如下所示 let response = [ {} ]; 这是一个包含空对象的数组。我应该进行什么样的检查来确定此响应是否与此完全相同。i、 e [{}] === response; // returns false 如果响应是[{}]如何执行,我希望有一个返回false的检查 堆栈溢出问题已经存在,它询问如何检查空对象。我的问题是如何检查具有空对象的数组。完全不同。这不是任何问题的重复 首先用array.isArray检查它是否是一个数组,然后检查.length以查看它是否是
let response = [
{}
];
这是一个包含空对象的数组。我应该进行什么样的检查来确定此响应是否与此完全相同。i、 e
[{}] === response; // returns false
如果响应是[{}]
如何执行,我希望有一个返回false的检查
堆栈溢出问题已经存在,它询问如何检查空对象。我的问题是如何检查具有空对象的数组。完全不同。这不是任何问题的重复 首先用
array.isArray
检查它是否是一个数组,然后检查.length
以查看它是否是一个数组,然后检查第一个元素是否为空对象(typeof
和object.keys()。length==0
)。这样你就会很确定这是你想要的
另一个选项是使用json:json.stringify(响应)=='[{}]'
。请注意响应中的循环依赖关系。您可以简单地执行以下操作:
let response = [{}];
console.log(JSON.stringify([{}]) === JSON.stringify([{}])); // true,
但如果您的响应是循环的,那么这将失败
另一种方法是:
let response = [{}];
console.log(
Array.isArray(response) &&
response.length === 1 &&
Object.prototype.toString.call(response[0]) === '[object Object]' &&
Object.getOwnPropertyNames(response[0]).length === 0
); // true
那么:
Object.keys(response[0] || {}).length === 0
FWIW,如果一个数组包含一个对象,那么它就不是空的。我会这样做:
array.isArray(response)&&response.length==1&&typeof response[1]==object'&&object.keys(response[1])。length==0
@FelixKling这不是那个问题的重复。在这个问题中,询问数组中的空对象。那个问题只要求一个空对象。:)@阿德莱姆兰:我希望你知道如何检查数组的长度以及如何访问第一个元素:)“完全不同。”不完全一样。检查对象的空性是问题的一部分。arr.length==1&&ismptyobject(arr[0])
其中ismptyobject
是另一个问题中建议的实现。它可能是一个包含多个元素的数组,但可能适用于大多数用例;)在[[]]
作为对象的情况下不起作用。键([])。长度为0@AyushGupta但这不是OP要求的。也许,但如果OP需要准确地检查该响应,并且[[]]
是有效的响应,那么您的响应对于循环问题不会100%可靠,我相信stringify有一个选项,它只会深入n层,解决问题(如果结构是循环的,那么无论如何它肯定会是不同的2层深度)。我需要查一下,谢谢你,先生。这很有帮助。仅供参考,typeof[]
是object
,而object.keys([])。length
是0,所以您可能需要对object执行不同的检查