リクエストにクエリがあるかどうかをチェックし、それに基づいてさまざまなアクションを実行する関数があります。現在、私はif(query)
これを他の何かで行っています。ただし、クエリデータがない場合は、{}
JSONオブジェクトになってしまうようです。if(query)
そのため、私はそのようなものに置き換える必要がありif(query.isEmpty())
ます。NodeJSでこれを行う方法を誰かが説明できますか?V8 JSONオブジェクトにはこの種の機能がありますか?
6 に答える
次のいずれかの機能を使用できます。
// 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) {
return !Object.keys(obj).length > 0;
}
これを使用することもできます:
function isEmpty(obj) {
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
return false;
}
return true;
}
アンダースコアまたはjQueryを使用している場合は、それらisEmpty
またはisEmptyObject
呼び出しを使用できます。
Object.keys(myObj).length === 0;
Objectが空であるかどうかを確認する必要があるため、for..in loop.Asで内部的に反復することにより、キーの配列を返すネイティブメソッドObject.keys(myObj).lengthを直接呼び出す方が適切ですObject.hasOwnProperty
。ブール結果を返します。それ自体がfor..inループで反復され、時間計算量O(N2)を持つオブジェクトに存在するプロパティに基づきます。
一方、それ自体が2つ以上の実装またはその他を持つUDFを呼び出すことは、小さなオブジェクトに対しては正常に機能しますが、オブジェクトサイズが大きい場合、イベントループで他に何も待機していない限り、全体的なパフォーマンスに深刻な影響を与えるコードをブロックします。
との互換性がObject.keys
あり、ノードに互換性がある場合は、それを確実に使用する必要があります。
ただし、互換性がなく、何らかの理由でループ関数を使用することは問題外である場合、私のように、次の解決策を使用しました。
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
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;