Есть ли способ сделать массив свойств из массива объектов без итерации? - PullRequest
0 голосов
/ 15 декабря 2018

Извините за плохой заголовок - я не знаю, как его отформатировать.Я объясню свой вопрос.

Итак, у меня есть этот req.user:

click

Я хочу создать промежуточное ПО, чтобы я могпроверьте, имеет ли пользователь доступ к этому региону, проверив, совпадает ли какой-либо из кодов из req.user.privileges.region с тем, что у меня есть в БД (1 для администраторов).

middleware.access2 = function(req, res, next)
{
    if(req.isAuthenticated())
    {
        User.findOne({'username': req.user.username, "privileges.region": {$in: [1, req.body.regiune]}}, function(err, usr)
    {
        if(err)
        {
            console.log("middleWare.access2 - " + err);
            return res.redirect("/login");
        }
        else
        {
            if(usr !== null)
            {
                console.log(usr);
                return next();
            }
            else
            {
                return res.redirect("/login");
            }
        }
    })
    }
}

Есть ли способ сделать это без итерации?Я могу создать массив с регионами, которые есть у пользователя (из req.user), и передать его в запрос.

Могу ли я каким-то образом получить доступ к privileges.region, чтобы мне не требовалась итерация, или я должен использовать приведенную выше идею?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Другой подход с lodash

const _=require('lodash')

const user={
  username:'marcu',
  privileges:[
    {
      id:1,
      region:10,
      write:1,
      edit:1
    },
    {
      id:2,
      region:15,
      write:1,
      edit:1
    },
    {
      id:3,
      region:20,
      write:1,
      edit:1
    }
  ]
}

const userArr=_.values(user.privileges)

const found=userArr.find(o=>o.region==15)
console.log(JSON.stringify(found));

вывод: {"id":2,"region":15,"write":1,"edit":1}

вывод будет неопределенным, если значение не найдено

0 голосов
/ 16 декабря 2018

Вы можете использовать lodash Я написал базовый пример, его можно уточнить.

const _=require('lodash')

const user={
  username:'marcu',
  privileges:[
    {
      id:1,
      region:10,
      write:1,
      edit:1
    },
    {
      id:2,
      region:15,
      write:1,
      edit:1
    },
    {
  id:3,
  region:20,
  write:1,
  edit:1
}
  ]
}

found=_.findKey(user.privileges,o=>o.region===15)

  console.log(found);

для o.region===15, вывод 1, для o.region===10, вывод0, для o.region===20, вывод равен 2 и т. Д.findkey возвращает индекс объекта, который содержит значение.Когда значение отсутствует, результат не определен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...