当前位置: 首页 > 知识库问答 >
问题:

角度扩展操作员工作不正常?

平航
2023-03-14

我正在尝试以角度处理数组。我需要从数组中获取管理员用户名,并尝试下面的方法

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

共有3个答案

苏华藏
2023-03-14

在函数中,将user.role=user.role.replace(/\s/g, '-').toUpperCase()替换为一个新变量,如下所示:

getAdminName(users){
   let usersList = [...users]
   let name = ''
    name = usersList.filter((user)=>{
      let role = user.role;
      role = role.replace(/\s/g, '-').toUpperCase()
      return role === 'PROFILE-ADMIN'
    }).map(row=>{
      return row.name
    })
    this.adminName = name[0]
  }
胡景焕
2023-03-14

用户是一种参考类型。因此,您需要创建对象的深度副本。尝试使用JSON.parse方法创建对象的深度副本:

let usersList = [...JSON.parse(JSON.stringify(users))]
吉凯捷
2023-03-14

我会改变过滤器逻辑以避免任何副作用。

getAdminName(users) {
  const name = users
    .filter(user => user.role.replace(/\s/g, '-').toUpperCase() === 'PROFILE-ADMIN')
    .map(row => row.name);

  return name ? name[0] : '';
}

这样,您就不需要考虑spread操作符是如何工作的。

this.getAdminName(this.data.users) 
 类似资料:
  • 但其他事情都不起作用。例如: 显示:没有为此数据库实例注册名为的过程。请确保正确拼写了过程名,并正确部署了过程。 此外: Edit3:现在调用该过程apoc.spatial.sortByDistance...文档不是最新的。您必须查看存储库的代码...

  • 我有一个程序,用来接受用户的图像。我改为接受PDF文件,而不是我们的客户要求的问题是它不工作。 我已经换了哑剧。php配置到这个 这是我保存上传文件的CI代码 HTML 滑动分页 编辑:jquery报告该文件已成功上载,因为它返回JSON,但每当我检查目录时,都没有任何内容。奇怪的是,我将文件扩展名重命名为。TXT并上传了一个3.5MB的pdf文件。txt扩展名,它已成功上载并位于正确的目录中。

  • 在WildFly 8-1上,我的webapps目录中有和。 我已配置: 我有以下JSF。 其中是 更新: 应Guaido79的请求,我的:

  • 问题内容: 这两个扩展功能有什么区别? 尽管jquery.extend有充分的文档记录,但是angular.extend缺少详细信息,并且注释没有提供答案。(https://docs.angularjs.org/api/ng/function/angular.extend)。 angular.extend是否也提供深层复制? 问题答案: 并且是 非常 相似的。它们都从一个或多个源对象到目标对象进行

  • 嘿,我对typo3很陌生,我想建立一个网站。我正在运行10.4版。安装了引导程序包的类型3中的4个。我已经试着跟着导游走了https://docs.typo3.org/typo3cms/extensions/gridelements/stable/ 我已将打字稿复制到模板设置中,但前端没有输出。记住我是新手,所以我还不能很好地理解打字稿<那我能做些什么呢? 编辑:我想使用GriElements,这

  • 我正在将一个应用程序从旧版本的wicket迁移到wicket 8。一些页面工作正常(简单页面,如登录)。这些页面不使用扩展机制。当我访问具有该机制的页面时,该机制不起作用。我不知道这是否是一个bug,但我尝试了所有的方法,但没有找到解决方案。我正在使用wicket 8.0.0-M5(我知道这不是一个稳定的版本)。有人有同样的问题吗?这是我的代码: WerklijstPagexxx.html Wer