web-dev-qa-db-ja.com

NodeJSでJSONが空かどうかを確認するにはどうすればよいですか?

リクエストにクエリがあるかどうかを確認し、それに基づいてさまざまなアクションを実行する機能があります。現在、私はif(query)に他の何かをさせます。ただし、クエリデータがない場合、_{}_ JSONオブジェクトになります。そのため、if(query)if(query.isEmpty())またはそのようなものに置き換える必要があります。 NodeJSでこれを行う方法を誰か説明できますか? V8 JSONオブジェクトには、この種の機能がありますか?

39
thisissami

次の機能のいずれかを使用できます。

// 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.
}
78
PleaseStand

これを使用できます:

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呼び出しを使用できます。

29
ali haider
Object.keys(myObj).length === 0;

Objectが空かどうかを確認するだけでよいため、for..in loop.As Object.hasOwnPropertyで内部的に反復することでキーの配列を返すネイティブメソッドObject.keys(myObj).lengthを直接呼び出す方が良いでしょうfor..inループで繰り返されるオブジェクトに存在するプロパティに基づく結果。時間の複雑さはO(N2)になります。

一方、それ自体が2つ以上の実装を持つUDFを呼び出すと、小さなオブジェクトに対しては正常に機能しますが、イベントループで他に何も待機していない限り、オブジェクトサイズが大きい場合、全体的なパフォーマンスに重大な影響を与えるコードをブロックします.

6
Shubham Sharma

Object.keysと互換性があり、ノードに互換性がある場合は、必ず使用する必要があります。

ただし、互換性がなく、何らかの理由でループ関数の使用が問題にならない場合は、私のように、次の解決策を使用しました。

JSON.stringify(obj) === '{}'

このソリューションは、必要な場合にのみ「最後の手段」として使用することを検討してください。

コメントで「このソリューションが理想的ではない多くの方法がある」を参照してください。

最後の手段のシナリオがあり、完全に機能しました。

2
guy mograbi

私の解決策:

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
1
Trung Nguyên