【问题标题】:Filtering Javascript array of objects by account type按帐户类型过滤对象的 Javascript 数组
【发布时间】:2021-10-04 00:13:01
【问题描述】:

我有一个 javascript 数组,其中包含有一些属性的对象,其中有一些布尔值。我想获取用户的帐户类型并过滤掉那些不适用于他们的帐户类型。我已经包含了我尝试过的过滤器代码,但是它不起作用,因为如果只有一个 if 语句成真,它就会过滤掉。我明白这一点,但不确定如何解决。

过滤代码

if(acc_type != 'Admin') {
      this.items = this.items.filter((item) => {
        return item.admin != true
      })
    }
    if(acc_type != 'Manager') {
      this.items = this.items.filter((item) => {
        return item.manager != true
      })
    }

此过滤器正在作用于数组中的一些对象

{ header: "Management", admin: true, manage: true },
    {
        title: 'Creation Form',
        to: '/management/creation-form',
        admin: true,
        manage: true,
    },
    {
        title: 'Management',
        to: '/management',
        admin: true,
        manage: true,
    },
    { header: "Settings" },
    {
        title: 'Account',
        to: '/settings/account',
        admin: true
    },
    {
        title: 'Billing',
        to: '/billing',
        admin: true
    },

【问题讨论】:

  • 你能举一个结果例子吗?我很难理解要求
  • 在您的情况下,使用由经理填写的 else 项目,然后由 no manage 再次填写,因此结果当然是空的

标签: javascript node.js filter


【解决方案1】:

据我了解:

this.items = this.items.filter(function(item){
  if(acc_type == 'Admin')
    return item.admin || !item.manager
  else if(acc_type == 'Manager')
    return item.manager || !item.admin
  else // any other acct
    return !item.admin && !item.manager
})

【讨论】:

  • 谢谢你这与我已经存在的完美配合。它似乎也适用于其他帐户类型,几乎没有什么变化。
【解决方案2】:
  this.items = this.items.filter((item) => {
    return acc_type != 'Admin' && item.admin != true && 
           acc_type != 'Manager' && item.manager != true
  })

【讨论】:

  • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。您可以在帮助中心找到更多关于如何写好答案的信息:stackoverflow.com/help/how-to-answer。祝你好运?
【解决方案3】:

只需扭转您的逻辑即可使其发挥作用。

如果它是“管理员”帐户,则具有admin: true 的每个项目都应在结果列表中。如果帐户是“经理”,则具有manage: true 的所有内容都应在结果列表中。

if (acc_type === 'Admin') {
  this.items = this.items.filter(item => !!item.admin);
}
else if (acc_type === 'Manager') {
  this.items = this.items.filter(item => !!item.manager);
}

据此,对于“管理员”帐户,所有条目都将在结果列表中,对于“经理”帐户,将只有前两个条目。

不要被!! 弄糊涂了——它只是一个布尔转换。本例中可以省略。

【讨论】:

    猜你喜欢
    • 2023-02-11
    • 2021-12-17
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2021-08-27
    相关资源
    最近更新 更多