私はオブジェクトを文字列化してクライアントに送信する前に、結果(オブジェクト)をmongooseクエリから返して、いくつかのキーを置き換えたり削除したりします。ノード内のオブジェクトを検査/反復する方法は?
私はconsole.logオブジェクトを、すべてがいいです(すべてのキーが表示され、それ以上はありません)。私がオブジェクトのfor..inを実行すると、隠されたフィールドがどこからもポップアップしません(そして関心のあるキーはありません)。彼らは意味があります - 彼らはマングースに属します - しかし私はそれらを望んでいません。 Object - hidden fieldsポップアップでObject.keysまたはObject.getOwnPropertyNamesを使用すると、同じことが起こります。
私は、util.inspect(obj、true、null、true)で要素を検査し、その結果をコンソールに記録したかったのです。コンソール上の結果は、検査なしで直接console.loggedした場合と同じです。
今、2つの質問があります。
- オブジェクトを正しく検査して、実際にそのオブジェクトに関する内部情報または隠れた情報を実際に取得するにはどうすればよいですか?
- オブジェクトを反復処理してフィールドを取得するにはどうすればよいですか? (はい、私はこのfor..inループ内でhasOwnPropertyをチェックをしています)
// EDIT
OK、私はそれを得ました。何らかの調査の後、私は、mongooseオブジェクトがそのプロパティをプロキシし、なぜconsole.logが期待される出力構造にあるのかを説明するtoJSON関数を持っていることに気付きました。解決方法は、Mongoose自身のtoObjectメソッドを使用することです。
mongooseObj.toObject({ getters: true, virtuals: false })
このように、私は私が知っているようにクライアントを望んでいないキーを削除/ Object.getOwnPropertyNamesを反復処理し、置き換えることができます!
少し質問を言い換えることができますか?私はあなたが何を求めているのか理解するのに苦労しています。 「隠されたフィールド」とはどういう意味ですか?プロトタイプチェーンを上回るプロパティだけですか?非列挙型としてマークされたプロパティまたは_underscoreで始まるプロパティ? –