Это лучший способ преобразовать строку в объект в Node.js? - PullRequest
0 голосов
/ 14 сентября 2018

Код ниже работает, однако, я думаю, что это много кода. Мне неудобно с этим. Кто-нибудь знает более краткий способ написать это?

Основная цель - извлечь параметр сортировки из HTTP-запроса и отсортировать коллекцию Mongoose / Mongodb.

Запрос на сортировку 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 ]

0 голосов
/ 14 сентября 2018

Да, есть:

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

Относительно вашего кода:

1) vfields - это массив, а элементы массивов не содержат [ или ]в вашем примере так нет необходимости их удалять.

2) sort ожидает объект, поэтому вы должны передать объект, а не строку.

0 голосов
/ 14 сентября 2018

Если я вас правильно понимаю, и ваша строка сортировки всегда представляет собой массив, содержащий два элемента, вы можете сделать что-то вроде этого:

var s='["id", "ASC"]';
var arr=JSON.parse(s);
var sortObj={};
sortObj[arr[0]]=arr[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...