代码之家  ›  专栏  ›  技术社区  ›  Aldo

这是将字符串转换为对象的最佳方法吗Node.js?

  •  0
  • Aldo  · 技术社区  · 6 年前

    下面的代码是工作,但是,我认为这是一个编码很多。我对此感到不舒服。有人知道一个更简洁的方法来写这个吗?

    GET /flavors?sort=id ASC ,所以,我拿了这根绳子 ["id", "ASC"] sort 把它改造成 {id : ASC} sortStr

    router.get("/", (req, res) => {
          var { sort } = req.query;
          var v_fields = sort.split(",");
          var v_field = v_fields[0].replace('[', '');
          var v_order = v_fields[1].replace(']', '');
          var sortStr = `{ ${v_field} : ${v_order} }`;
          var re = new RegExp(`"`, 'g');
          sortStr = sortStr.replace(re, '');
    
          Flavor.find().sort(sortStr).then(result => {
    ...
    }
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   sbrass    6 年前

    如果我理解正确,并且排序字符串始终表示包含两个元素的数组,则可以执行以下操作:

    var s='["id", "ASC"]';
    var arr=JSON.parse(s);
    var sortObj={};
    sortObj[arr[0]]=arr[1];
    
        2
  •  0
  •   Jonas Wilms    6 年前

    是的,有:

     const [key, order] = req.query.sort.split(" ");
     Flavor.find().sort({ [key]: order }).then(/*...*/);
    

    关于您的代码:

    1) vfields 是数组,数组元素不包含任何 [ ]

    2) 排序需要一个对象,所以应该传递一个对象而不是字符串。