我有一个函数可以检查请求是否有任何查询,并根据它执行不同的操作。目前,我已经if(query)
做了别的事情。但是,似乎当没有查询数据时,我最终得到了一个{}
JSON 对象。因此,我需要替换if(query)
为if(query.isEmpty())
或类似的东西。谁能解释我如何在 NodeJS 中做到这一点?V8 JSON 对象有这种功能吗?
问问题
140009 次
6 回答
117
您可以使用以下任一功能:
// 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.
}
于 2012-07-14T03:41:32.337 回答
35
你可以使用这个:
var isEmpty = function(obj) {
return Object.keys(obj).length === 0;
}
或这个:
function isEmpty(obj) {
return !Object.keys(obj).length > 0;
}
你也可以使用这个:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
于 2012-07-14T03:43:35.107 回答
20
Object.keys(myObj).length === 0;
由于只需要检查 Object 是否为空,因此最好直接调用本机方法 Object.keys(myObj).length 通过内部迭代 for..in 循环返回键数组。AsObject.hasOwnProperty
返回布尔结果基于对象中存在的属性,该对象本身使用 for..in 循环进行迭代,并且时间复杂度为 O(N2)。
另一方面,调用本身具有以上两个实现或其他实现的 UDF 将适用于小对象,但如果对象大小很大,则会阻塞将对整体性能产生严重影响的代码,除非事件循环中没有其他东西在等待。
于 2018-09-12T08:55:03.640 回答
2
如果您与 兼容Object.keys
,并且 node 确实具有兼容性,那么您应该确定使用它。
但是,如果您没有兼容性,并且出于任何原因使用循环函数是不可能的 - 像我一样,我使用了以下解决方案:
JSON.stringify(obj) === '{}'
仅在必须时才将此解决方案视为“最后的手段”。
请参阅评论“此解决方案在许多方面并不理想”。
我有一个不得已的方案,而且效果很好。
于 2014-07-12T21:23:21.507 回答
2
我的解决方案:
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
于 2018-09-12T08:52:10.307 回答
2
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;
于 2020-08-14T11:42:56.627 回答