【发布时间】:2020-07-27 12:39:39
【问题描述】:
我正在尝试以角度处理数组。我需要从数组中获取管理员用户名并尝试以下方法
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 链接在这里
【问题讨论】:
-
user.role = user.role.replace(/\s/g, '-').toUpperCase()这将修改用户角色。如果不将其分配给user.role,您就不能检查吗? -
是的,我知道,我在我的问题中解释过,我在仅从扩展运算符创建副本时遇到问题
-
为什么要使用扩展语法?您可以在不更改数据本身的情况下过滤掉任何元素。我认为没有必要先对数组进行浅拷贝。
-
坦率地说,这种方法是不必要的。只要您使用
user.role = user.role.replace(/\s/g, '-').toUpperCase(),再多的传播运算符都不会给出想要的结果 -
好的,你能告诉我哪个更好,这将帮助我了解正确的方法
标签: javascript angular