根据数组中对象的值过滤掉数组

时间:2021-02-20 07:14:55

标签: reactjs

我有一个数组

    [
      {
       email: "test@gmail.com"
       loginLink: "http://localhost:3000/signup?q=f1aea1ff-c833-4e7b-8608-a1f51a9da104"
       name: "Pulkit (Creator)"
       roles: {hr: false, manager: true, admin: true}
      
      },  {and similar more values}

现在我已经按照下面的方式根据姓名和邮箱来整理值了

  useEffect(() => {
    setOnScreenUsers(
      users.filter((user) => {
        if (userFilterQ === "") {
          return user;
        } else if (
          user.user.name.toLowerCase().includes(userFilterQ.toLowerCase()) ||
          user.user.email.toLowerCase().includes(userFilterQ.toLowerCase())
        ) {
          return user;
        } else {
          return "";
        }
      })
    );
  }, [userFilterQ, users]);

这东西运行正常。现在假设用户只想获取那些具有 hr 或 manager 角色的数组(一次一个)。如何实现这一点

PS:我将过滤后的数组存储在另一个数组中以进行渲染

如果您需要任何额外信息,请告诉我

2 个答案:

答案 0 :(得分:0)

我认为您对 Array.prototype.filter 方法的工作方式有误解。在回调函数中,您应该返回一个布尔值(false,从过滤后的数组中删除项目)

您要做的只是在回调函数中添加另一个条件。

useEffect(() => {
    setOnScreenUsers(
        users.filter((user) => {
            if (serFilterQ === "") {
                return true;
            }

            const lowercaseFilterQ = userFilterQ.toLowerCase();
            if (
                user.user.name.toLowerCase().includes(lowercaseFilterQ) ||
                user.user.email.toLowerCase().includes(lowercaseFilterQ) ||
                // Change the line below to whatever type of role you'd like
                user.user.roles.hr
            ) {
                return true;
            }

            return false;
        })
    );
}, [userFilterQ, users]);

答案 1 :(得分:0)

如果对 let x = {} const a = new Set([3, 5]) x[a] = 1 console.log(x) // >{[object Set]: 1} const b = new Set([1, 4]) x[b] = 2 console.log(x) // >{[object Set]: 2} 属性应用过滤器,那么您只需将其添加为附加条件测试即可。

您也可以稍微简化一下逻辑。如果过滤器值是假的,只需返回 from collections import defaultdict a = [1,2,4,5,8] b = [8,5,4,1,2] d = defaultdict(list) #(element,index) map for i,v in enumerate(a): d[v]=[i] for j,x in enumerate(b): d[x].append(j) print(d) 以便所有元素都被过滤到结果数组。如果任何过滤器查询值是真值,则返回布尔表达式。

role

让我们知道如果您通过多个值过滤 true,逻辑需要稍作调整。

相关问题