Javascript将数组转换为对象

我一直在使用node和redis。 我遇到的问题是,当我在redis中使用hgetall时,它返回一个对象。

{ uid: '6203453597', first_name: 'Name', last_name: 'Surname', gender: 'male', email: 'email@email.com', status: '1', chips: '4002043' } 

但是,当我使用hmget并指定我想要的字段时,它将返回一个数组。

 [ '6203453597', 'Name', 'Surname', '4002043' ] 

所以,我想将数组转换为关联数组,就像第一个一样。 将代码和性能转换成最好的方法是什么?

我也使用redis中的multi命令。 所以它在第一个例子中返回一个对象数组,在第二个例子中它返回一个数组数组。 所以,重要的是高效和自动,而不是手动。

YUI的dataschema函数是我正在寻找的。 然而,它需要在node.js上完成,我使用的唯一第三方实用工具是下划线。 有没有这样做的简单方法,或者我需要手动转换一个循环下摆。

谢谢,

我已经build立了类似于你想要的东西,但对于sort命令。 这应该为hmget工作:

 function getFieldsAsObject(key, fields, next) { function mapResults(err, values) { if(err) return next(err); var result = {}; for(var i = 0, len = fields.length; i < len; i++) { result[fields[i]] = values[i]; } next(null, result); } var args = [].concat(key).concat(fields).concat(mapResults); client.hmget.apply(client, args); } 

编辑:一个更适合您的示例与multi hmget调用的版本。

 // Call with an array of fields and a function(err, results) {} function mapResults (fields, next) { // Return a closure for a multi.exec call return function (err, replies) { if(err) return next(err); // Call next with no error and the replies mapped to objects next(null, replies.map(mapFields)); }; function mapFields (reply) { var obj = {}; for(var i = 0, len = fields.length; i < len; i++) obj[fields[i]] = reply[i]; return obj; } } 

示例用法:

 var client = require("redis").createClient() , multi = client.multi(); multi.hmget("a.1", "foo", "bar"); multi.hmget("a.2", "foo", "bar"); multi.exec(mapResults(["foo", "bar"], function(err, results) { // results will be [{foo: 17, bar: 4711}, {foo: 42, bar: 3.1415926535897932384626433}] console.log(results); })); 

使用下划线functionselect和值 ,你可以从1到2

 _.values(_.pick({ uid: '6203453597', first_name: 'Name', last_name: 'Surname', gender: 'male', email: 'email@email.com', status: '1', chips: '4002043' },"uid","first_name","last_name","chips")) ["6203453597", "Name", "Surname", "4002043"] 

或与对象,你可以从2到1。

 _.object(["uid","first_name","last_name","chips"],[ '6203453597', 'Name', 'Surname', '4002043' ]) {uid: "6203453597", first_name: "Name", last_name: "Surname", chips: "4002043"} 

如果你想将对象转换成数组很简单:

 var myarray = new Array(); for(var attrName in myobj){ myarray.push(myobj[attrName]); }