На основе ролевых push-цветов в массиве

#angular #typescript

#angular #typescript

Вопрос:

У меня 50 ролей. Допустим, разработчик, менеджер, руководитель группы, ведущий разработчик, менеджер, помощник менеджера, старший менеджер и так далее. У каждой роли есть цвет. Например, JSON показан ниже

 {"Manager":"red","Team Lead":"Orange","Manager":"pink","Assistant Manager":"Yellow}
  

Вывод API выглядит следующим образом

 this.roles= ['Manager','Team Lead','Lead Developer', 'Manager']
  

мой желаемый результат должен быть таким

  this.colors=['red','Orange','blue','pink']
  

как мне этого добиться?

Комментарии:

1. Я понимаю вашу проблему, и некоторые из них уже ответили на нее, но я думаю, вам следует обратить внимание на свой json, у вас не может быть объекта с дублирующимся ключом… И я вижу, что ваш «менеджер» записывается дважды.

2. У Manger не будет 2 цветов. Я просто написал это для примера. Каждая роль будет иметь один уникальный цвет

Ответ №1:

 const colorsOfRoles = JSON.parse(YoursObjet);
this.colors = this.roles.map((role) => colorsOfRoles[role])
  

Я не уверен, чего вы хотите

Ответ №2:

Если вы работаете с компонентом, вызовите эту функцию onInit , чтобы убедиться, что она будет вызвана перед первым отображением.

 rolesWithColors = {'Manager':'red','Team Lead':'Orange','Manager':'pink','Assistant Manager':'Yellow'};
roles = ['Manager','Team Lead','Lead Developer', 'Manager'];
colors = [];   

ngOnInit() {
  this.findColors(); 
}

findColors() {
  this.colors = [];
  this.roles.foreach(role => {
    this.colors = [...this.colors, this.rolesWithColors[role]];
  });
}