javascript - 映射数组到对象

标签 javascript json node.js redis

我正在使用 HMGET 检索 redis 哈希键的多个字段,以便使用 JSON 简单地发送它们:

redis.HMGET('key', 'name', 'date', // a lot more fields here,
    function(err, reply){
        res.jsonp({
            name: reply[0],
            date: reply[1],
            // other fields
        });
    }
);

处理大量字段会导致列表非常长,因此代码可读性较差。所以我想知道:是否有一种更漂亮和通用的方法将 reply 数组映射到 JSON 响应对象 - 最好不必写下两次字段名称?

最佳答案

我不清楚您是否正在获取散列的所有属性,在这种情况下您应该使用 hgetall 返回一个对象。否则,您希望界面看起来像这样:

hmgetObject(redis)('key', 'name', 'date', ..., function (err, reply) {
  // Here, reply is already an object

  res.jsonp(reply);
});

您会注意到像这样传递 redis 客户端如何让您轻松地重用函数:

var hmget = hmgetObject(redis);

hmget('key1', 'name', 'date', ...);
hmget('key2', 'foo', 'bar', ...);

这是实现,它是通用的并且适用于任意数量的参数):

function hmgetObject (redis) {

  return function () {

    var args = [].slice.call(arguments, 0),
        cb = args.pop();

    args.push(map(args.slice(1), cb));
    redis.hmget.apply(redis, args);
  }

  function map (props, cb) {

    return function (err, vals) {

      if(err) return cb(err);

      var obj = {};
      for(var i = 0, l = props.length; i < l; i++) {
        obj[props[i]] = vals[i];
      }

      cb(null, obj);
    }
  }
}

关于javascript - 映射数组到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967901/

相关文章:

javascript - 如何让 img 在页面加载后出现并在时间后消失?

javascript - 在 jQuery 中选择 DIV

javascript - 如何在没有 JavaScript 的情况下强制 HTML 元素保持恒定的宽高比?

json - 从 Golang 中的模数和指数创建公钥

node.js - 试图让我自己的 RxJs 可观察

javascript - 如何在 d3.js 中移动圆圈(数据点)

jquery - 如何使用 Jquery ajax 读取雅虎天气 JSON 数据

json - 玩2 Json格式,捕获Int或String

node.js - Mongoose,将数据添加/更新到集合的一组文档

MySQL 8 : ER_NOT_SUPPORTED_AUTH_MODE