Проверьте, есть ли значение в массиве и верните true или false angular 6+ - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть такой массив

roles = ['AnyRulesGo@admin', 'NoRules@admin', 'HowYesNo@history', 'MamaMia@survey'];

И у меня есть такой объект

 externalLinks = [
    {
      link: '#',
      icon: 'Icon',
      translation: 'Home',
      role: '@history',
      active: false,
      visible: false
    },
    {
      link: '#',
      icon: 'Task',
      translation: 'Tasks',
      role: '@task',
      active: false,
      visible: false
    },
    {
      link: '#',
      icon: 'Files',
      translation: 'Files',
      role: '@admin',
      active: true,
      visible: false
    }
  ];

Мне нужна какая-то функция, чтобы проверить, имеет ли значение роль вexternaLinks существует в массиве ролей , и обновите это значение visible во externalLinks с false до true

У меня нетгораздо больше кода, потому что я даже не знаю, с чего начать, любая помощь будет отличной, спасибо

Одна из проблем заключается в том, что у меня есть имя роли netire, начинающееся только с @, это означает, что мне нужно сократить этоСтрока, а чем сравнить?

Я пробовал с этой функцией, но не повезло

function objectsAreSame(x, y) {
   var objectsAreSame = true;
   for(var propertyName in x) {
      if(x[propertyName] !== y[propertyName]) {
         objectsAreSame = false;
         break;
      }
   }
   return objectsAreSame;
}

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вы можете использовать forEach для зацикливания внешних ссылок.Затем используйте some и includes, чтобы проверить, существует ли роль.

roles = ['AnyRulesGo@admin', 'NoRules@admin', 'HowYesNo@history', 'MamaMia@survey'];

externalLinks.forEach((extLink) => {
  if(roles.some(role => role.includes(extLink.role))){
    extLink.visible = true;
  }
})
0 голосов
/ 07 февраля 2019

Вы можете перебирать каждый объект в externalLinks, используя array#forEach.Затем проверьте роль в массиве roles, используя array#some и string#incldues, и обновите значение ключа visible.

let roles = ['AnyRulesGo@admin', 'NoRules@admin', 'HowYesNo@history', 'MamaMia@survey'],
    externalLinks = [ { link: '#', icon: 'Icon', translation: 'Home', role: '@history', active: false, visible: false }, { link: '#', icon: 'Task', translation: 'Tasks', role: '@task', active: false, visible: false }, { link: '#', icon: 'Files', translation: 'Files', role: '@admin', active: true, visible: false } ];

externalLinks.forEach(o => {
  o.visible = false;
  if(roles.some(r => r.includes(o.role)))
    o.visible = true;
});
console.log(externalLinks);
0 голосов
/ 07 февраля 2019

сделать две петли:

//Make all false
externalLinks.forEach(x=>x.visible=false);

//for each role, filter by role and forEach value filtered, make visible
role.forEach(role=>{
  let busc="@"+role.split('@')[1]
  externalLinks.filter(x=>x.role==busc)
      .forEach(xfilter=>xfilter.visible=true)
})
//If only want a role "roleSearch"
  let busc="@"+roleSearch.split('@')[1]
  externalLinks.filter(x=>x.role==busc)
      .forEach(xfilter=>xfilter.visible=true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...