如何使一个函数返回一个具有NodeJS的dynamic键名的数组?

我正在使用NodeJS构build一个RESTful API,为MySQL ORM提供快速,快速资源和续集。 我希望能够检索一组logging,并用res.json(logging)进行响应。 但是,我无法直接使用sequelize返回的集合。 当我尝试时,我得到以下错误:

TypeError:将圆形结构转换为JSON

作为解决办法,我创build了一个函数,它接受logginginput并返回一个数组:

/** * takes an Array of records and * returns a collection * * @param {Array} recs * @return {Array} * @api public */ function recs2Array(recs){ for(var c = 0; c < recs.length; c++){ var collection = []; (function(c){ // this is crap and must be done for every query var data = { id: recs[c]['id'], gender: recs[c]['gender'] }; collection.push(data); // debugger; })(c); }; return collection; }; 

现在,这是非常低效的,因为我必须手动定义所有要返回的数组键。 这意味着我必须在每个我想要res.json()的model.findAll()的每个model.find()使用此模式。 在我的一个资源控制器中,我必须为多个集合执行此操作,从而产生大量额外的代码。

为了使这个更好,我试图创build一个将dynamic生成数组键的函数:

 /** * takes an Array of records * and and Array of fields and returns * a collection. * * @param {Array} recs * @param {Array} fields * @return {Array} * @api public */ function recs2ray(recs, fields){ for(var c = 0; c < recs.length; c++){ fields = fields || null; var collection = []; (function(c){ for(var i = 0; i < fields.length; i++){ (function(i){ // how do I create dynamic, // variable key names? })(i); } debugger; } }; }; 

不幸的是,我不确定如何制作dynamic数组键。 我在想,我会传入一个预定义的数组,其中包含将在函数调用中映射的字段:

 var recs = recs2Array(genders, {['id', 'gender']}); 

当我这样做的时候,我觉得这种感觉在某种意义上破坏了后续的ORM。 所以,我的问题是:“我怎样才能dynamic地将由sequelize的model.findAll()返回的数组中的字段映射到一个数组中,该数组被推送到返回给调用者的集合中?

 var input = ...; var result = input.map(function(row) { var result = {}; ['id', 'gender'].forEach(function(key) { result[key] = row[key]; }); return result; }); 

或者,如果你想用辅助方法做到这一点:

 function purify(obj, keys) { return obj.map(function(row) { var result = {}; keys.forEach(function(key) { result[key] = row[key]; }); return result; }); } var result = purify(..., ['id', 'gender']);