我有一个函数可以检查请求是否有任何查询,并根据该函数执行不同的操作。目前,我有if(query)
做其他事情。但是,似乎当没有查询数据时,我最终得到一个{}
JSON对象。因此,我需要将if(query)
替换为if(query.isEmpty())
或类似的东西。任何人都可以解释我如何在NodeJS中做到这一点? V8 JSON对象是否具有此类功能?
答案 0 :(得分:76)
您可以使用以下任一功能:
// 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.
}
答案 1 :(得分:28)
您可以使用:
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;
}
如果使用underscore或jQuery,您可以使用isEmpty
或isEmptyObject
来电。
答案 2 :(得分:5)
Object.keys(myObj).length === 0;
由于只需要检查Object是否为空,最好直接调用本机方法Object.keys(myObj).length,该方法通过内部循环for..in循环返回键数组。 {1}}根据对象中存在的属性返回布尔结果,该对象本身使用for..in循环进行迭代,时间复杂度为O(N2)。
另一方面,调用本身具有上述两种实现方式或其他方式的UDF对于小型对象来说可以很好地工作,但是如果对象大小很大,除非事件中没有其他等待,否则将阻塞代码,这将严重影响总体性能。循环。
答案 3 :(得分:2)
如果您与Object.keys
兼容,并且节点确实具有兼容性,那么您应该使用它。
但是,如果你没有兼容性,并且出于任何原因使用循环功能是不可能的 - 像我一样,我使用了以下解决方案:
JSON.stringify(obj) === '{}'
考虑这个解决方案的最后手段'仅在必须时使用。
参见评论"有很多方法可以解决这个问题并不理想"。
我有一种不得已的方案,它完美无缺。
答案 4 :(得分:1)
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;
答案 5 :(得分:0)
我的解决方案:
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