Javascript 如何检查NodeJSON中的JSON是否为空?
我有一个函数来检查一个请求是否有任何查询,并基于此执行不同的操作。目前,我有Javascript 如何检查NodeJSON中的JSON是否为空?,javascript,json,node.js,v8,Javascript,Json,Node.js,V8,我有一个函数来检查一个请求是否有任何查询,并基于此执行不同的操作。目前,我有if(query)做其他事情。然而,似乎当没有查询数据时,我会得到一个{}JSON对象。因此,我需要将if(query)替换为if(query.isEmpty())或类似的内容。有人能解释一下我怎么能在NodeJS中这样做吗?V8 JSON对象是否具有此类功能?您可以使用以下任一功能: // This should work in node.js and other ES5 compliant implementatio
if(query)
做其他事情。然而,似乎当没有查询数据时,我会得到一个{}
JSON对象。因此,我需要将if(query)
替换为if(query.isEmpty())
或类似的内容。有人能解释一下我怎么能在NodeJS中这样做吗?V8 JSON对象是否具有此类功能?您可以使用以下任一功能:
// This should work in node.js and other ES5 compliant implementations.
function isEmptyObject(obj) {
return !Object.keys(obj).length;
}
// This should work both there and elsewhere.
function isEmptyObject(obj) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
return false;
}
}
return true;
}
用法示例:
if (isEmptyObject(query)) {
// There are no queries.
} else {
// There is at least one query,
// or at least the query object is not empty.
}
您可以使用以下选项:
var isEmpty = function(obj) {
return Object.keys(obj).length === 0;
}
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
或者这个:
function isEmpty(obj) {
return !Object.keys(obj).length > 0;
}
您还可以使用以下选项:
var isEmpty = function(obj) {
return Object.keys(obj).length === 0;
}
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
如果使用或,您可以使用它们的
isEmpty
或isEmptyObject
调用。如果您与对象兼容。键
,并且节点确实具有兼容性,您应该确保使用它们
但是,如果您不具备兼容性,并且出于任何原因,使用循环函数是不可能的-就像我一样,我使用了以下解决方案:
JSON.stringify(obj)=='{}'
只有在必要时才将此解决方案视为“最后手段”
请参见评论中的“此解决方案在许多方面都不理想”
我有一个万不得已的方案,效果非常好 我的解决方案:
let isEmpty = (val) => {
let typeOfVal = typeof val;
switch(typeOfVal){
case 'object':
return (val.length == 0) || !Object.keys(val).length;
break;
case 'string':
let str = val.trim();
return str == '' || str == undefined;
break;
case 'number':
return val == '';
break;
default:
return val == '' || val == undefined;
}
};
console.log(isEmpty([1,2,4,5])); // false
console.log(isEmpty({id: 1, name: "Trung",age: 29})); // false
console.log(isEmpty('TrunvNV')); // false
console.log(isEmpty(8)); // false
console.log(isEmpty('')); // true
console.log(isEmpty(' ')); // true
console.log(isEmpty([])); // true
console.log(isEmpty({})); // true
因为只需要检查对象是否为空,所以最好直接调用本机方法Object.keys(myObj).length,它通过在循环中使用for..in进行内部迭代来返回键数组。AsObject.hasOwnProperty
返回一个基于对象中存在的属性的布尔结果,该对象本身使用for..in循环进行迭代,其时间复杂度为O(N2)
另一方面,调用本身具有以上两种实现或其他实现的UDF对于小对象来说可以很好地工作,但如果对象大小很大,则会阻塞代码,这将对总体性能产生严重影响,除非事件循环中没有其他东西在等待。如果(0
naaa,query.length==未定义。长度是数组对象的标准长度,而不是JSON对象。这不是一个好的解决方案有很多原因,包括性能,以及对象字符串化的各种方式,例如,使用属性字符串化错误。@DaveNewton,我同意这不是一个好的解决方案。我在答复中说明了这一点。我不同意这个错误示例,因为Object.keys(obj).length==0
也会返回空,所以在这种情况下,这个解决方案仍然是正确的。
const isEmpty = (value) => (
value === undefined ||
value === null ||
(typeof value === 'object' && Object.keys(value).length === 0) ||
(typeof value === 'string' && value.trim().length === 0)
)
module.exports = isEmpty;