【问题标题】:Get to inside an array which is part of an object without a for loop, javascript进入一个数组,它是一个没有 for 循环的对象的一部分,javascript
【发布时间】:2021-12-25 02:15:09
【问题描述】:

我有这个有效的代码:

var roles = user.getRoles()
   for (var i = 0; i < roles.length; i++){
      if (Roles[i].getName()== ‘Admin’){
        --gets to this line
   }
}

但是我想知道如果没有像下面这样对我不起作用的 for/if 循环,我是否可以达到 TRUE/FALSE:

 if (user.getRoles().getName().indexOf('Admin') >-1){
    -does not get to this line
 }

给出错误:user.getRoles().getName 不是函数

如果我打印出角色,则返回: UserRole @ 718816D,UserRole @ 48BAF10B,UserRole @ 777D6D90,UserRole @ 34AD99FB,UserRole @ 79AB731E,UserRole @ 65269056,UserRole @ 3D9CBF48,UserRole @ 6306983,UserRole @ 6Ce88983,UserRole @ 4E792483,UserRole @ Userrole @ 1F8CA93A P. >

【问题讨论】:

  • 请添加user.getRoles()的返回值示例。
  • 什么是Roles?在第一个代码中检查Roles[i].getName(),在第二个代码中检查user.getRoles().getName(),所以Roles[i]user.getRoles() 似乎不同
  • @Georgy 怎么样? roles = user.getRoles() 这是一个项目数组角色[i] 是该数组的索引。
  • @NinaScholz 不太确定为什么需要这样做,它不是非描述性 ID
  • @Edward 可能是错字,你有var roles = user.getRoles(),但使用Roles[i].getName()Rolesroles 是不同的变量

标签: javascript arrays object


【解决方案1】:

所以我从提供的信息中猜想getName() 方法是在角色数组内的对象上定义的。所以user.getRoles() 会返回一个你不能调用getName() 方法的数组

我认为你可以做的是user.getRoles().find(el =&gt; el.getName() === 'Admin')

【讨论】:

  • 我忘记了那种脚本的名称。与使用 if 语句的普通 for 循环相比,这是否运行得更快、处理能力更低?
【解决方案2】:

您可以直接使用数组操作findIndexfindmdn docs

var roles = user.getRoles()
var i = roles.findIndex(r => r.getName() === 'Admin')
if(i > -1) {
    roles[i] // can access ith element
}

【讨论】:

  • 你知道这是否提供了任何处理速度的好处,而不是我提到的 for 循环?
  • 是的,它表现为提前返回,一旦找到第一个匹配项,它就不必遍历列表中的其余项目。所以它为更大的数组提供了相当大的性能优势,对于少于百万个项目的任何东西都没有太大的区别。
【解决方案3】:

在这种情况下,使用.includes 似乎对你有用。您似乎正在搜索已知字符串 ('Admin')

var roles = user.getRoles()
   if (roles.includes('Admin')) {
       - gets here if true
   }
}

https://www.digitalocean.com/community/tutorials/js-array-search-methods

【讨论】:

  • 我试过包含但它也返回错误。我假设我正在使用的 javascript 是早期版本
【解决方案4】:
if(user.getRoles()?.find(role => role.getName() === 'admin')){
   // do stuff
}

问号用于检查是否有来自 getRoles 的值。

查找将返回 null 或角色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多