我发现这是最优雅的方式。此外,我相信 JS 引擎已针对它进行了大量优化。
使用内置JSON.stringify(value[, replacer[, space]])
功能。文档在这里。
示例是在从外部 API 检索一些数据、相应地定义一些模型、获取所有无法定义或不需要的所有内容的结果和截断的上下文中:
function chop (obj, cb) {
const valueBlacklist = [''];
const keyBlacklist = ['_id', '__v'];
let res = JSON.stringify(obj, function chopChop (key, value) {
if (keyBlacklist.indexOf(key) > -1) {
return undefined;
}
// this here checks against the array, but also for undefined
// and empty array as value
if (value === null || value === undefined || value.length < 0 || valueBlacklist.indexOf(value) > -1) {
return undefined;
}
return value;
})
return cb(res);
}
在您的实施中。
// within your route handling you get the raw object `result`
chop(user, function (result) {
var body = result || '';
res.writeHead(200, {
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'application/json'
});
res.write(body);
// bang! finsihed.
return res.end();
});
// end of route handling