revalidator ( https://github.com/flatiron/revalidator )のスキーマ定義を使用して、不要なプロパティの Javascript オブジェクトをチェックしたいと思います。
次のスニペットを思いつきました:
function strip(object, schema) {
var strippedObject = {};
for (var property in schema.properties) {
if (schema.properties[property].type === 'object') {
strippedObject[property] = strip(object[property], schema.properties[property]);
} else {
strippedObject[property] = object[property];
}
}
return strippedObject;
}
このコードは、必要なプロパティをコピーし、ネストされたスキーマに再帰するスキーマを同期的にループします。
今回はイベントループをブロックしないか心配です。
I/O を行っていないので、これは無視できますか?
編集
コメントありがとうございます。jbaylina が述べたように、スキーマが最大 2 レベルにネストされ、それぞれ約 10 個のプロパティがあるのは事実です。それにもかかわらず、私は setImmediate を使用してみましたが、実際に問題がある場合は非同期で反復する可能性があります。
function strip(object, schema, callback) {
var strippedObject = {};
async.each(Object.keys(schema.properties), function (property, next) {
if (schema.properties.hasOwnProperty(property)) {
if (schema.properties[property].type && schema.properties[property].type === 'object') {
strip(object[property], schema.properties[property], function (err, obj) {
if (err) return next(err);
strippedObject[property] = obj;
next();
});
} else {
strippedObject[property] = object[property];
next();
}
}
}, function (err) {
if (err) return callback(err);
return callback(null, strippedObject);
});
}
これは非常に面倒に見えますが、機能し、テストに合格します。このソリューションについてどう思いますか?