Я пытаюсь обработать массив в angular. Мне нужно получить имя пользователя-администратора из массива и попробовать следующий подход
export class AppComponent {
adminName = ''
data = {
id:1,
name:'Test User One',
users:[
{id:1,name:'User 2',role:'Management Admin'},
{id:2,name:'User 3',role:'User'},
{id:3,name:'User 1',role:'Profile Admin'},
]
}
ngOnInit(){
this.getAdminName(this.data.users)
}
getAdminName(users){
let name = ''
name = users.filter((user)=>{
user.role = user.role.replace(/\s/g, '-').toUpperCase()
return user.role === 'PROFILE-ADMIN'
}).map(row=>{
return row.name
})
this.adminName = name[0]
}
}
Это работает, и я могу получить adminName , но это также меняет роль объекта данных и преобразует объект вот так
{
"id": 1,
"name": "Test User One",
"users": [
{
"id": 1,
"name": "User 2",
"role": "MANAGEMENT-ADMIN"
},
{
"id": 2,
"name": "User 3",
"role": "USER"
},
{
"id": 3,
"name": "User 1",
"role": "PROFILE-ADMIN"
}
]
}
Я понимаю, почему это произошло, и я попытался использовать оператор распространения, но он не работает, я попробовал следующий подход
Подход один
this.getAdminName([...this.data.users]) // passing from here using spread operator
Второе приближение
getAdminName(users){
let usersList = [...users]
let name = ''
name = usersList.filter((user)=>{
user.role = user.role.replace(/\s/g, '-').toUpperCase()
return user.role === 'PROFILE-ADMIN'
}).map(row=>{
return row.name
})
this.adminName = name[0]
}
Я могу сделать это, как показано ниже
getAdminName(users){
let name = ''
let role;
name = users.filter((user)=>{
role = user.role //used a variable in which holds
role = role.replace(/\s/g, '-').toUpperCase()
return role === 'PROFILE-ADMIN'
}).map(row=>{
return row.name
})
this.adminName = name[0]
}
Но я хочу сделать это с использованием подхода оператора распространения, поэтому, пожалуйста, подскажите, где я ошибаюсь
Stackblitz ссылка здесь
https://stackblitz.com/edit/angular-rjnytr