【问题标题】:Set State to Array Filter value on condition根据条件将状态设置为数组过滤器值
【发布时间】:2021-12-09 13:18:11
【问题描述】:

所以我想在下面的场景中使用 array.filter 来处理对象中非空字符串的值

setData(
                _.filter(rows, item => {
                    return (
                        item.firstName.toLowerCase().includes(filterTable.searchByName.toLowerCase()) &&
                        item.email.toLowerCase().includes(filterTable.searchByEmail.toLowerCase()) &&
                        item.cognitoId.toLowerCase().includes(filterTable.searchByCognitoId.toLowerCase()) &&
                        item.mfaEnabled.toString() === filterTable.searchByMfa.toString()
                    );
                })
            );

我可以将 ifelse 用于那里的值,但这将是一个很长的 ifelse

在上面的代码中,我想在 _.filter 中添加那些值为!== ''的项目

例如如果filterTable.email === '' 那么我想关注

setData(
                _.filter(rows, item => {
                    return (
                        item.firstName.toLowerCase().includes(filterTable.searchByName.toLowerCase()) && 
                        item.cognitoId.toLowerCase().includes(filterTable.searchByCognitoId.toLowerCase()) &&
                        item.mfaEnabled.toString() === filterTable.searchByMfa.toString()
                    );
                })
            );

【问题讨论】:

    标签: javascript arrays reactjs


    【解决方案1】:

    为搜索属性添加另一个&&

    这样试试

    setData(
        _.filter(rows, item => {
            return (
                filterTable?.searchByName &&
                item.firstName
                    .toLowerCase()
                    .includes(filterTable.searchByName.toLowerCase()) &&
                filterTable?.searchByEmail &&
                item.email
                    .toLowerCase()
                    .includes(filterTable.searchByEmail.toLowerCase()) &&
                filterTable?.searchByCognitoId &&
                item.cognitoId
                    .toLowerCase()
                    .includes(filterTable.searchByCognitoId.toLowerCase()) &&
                item.mfaEnabled.toString() === filterTable.searchByMfa.toString()
            );
        })
    );
    

    【讨论】:

    • @Ahsan Baloch,看看这个!!
    • Amila Senadheera 不,它不起作用,我已经尝试过了。复制你的代码也没有用
    【解决方案2】:

    感谢 Amila 的帮助解决了这个问题

    setData(
                _.filter(rows, item => {
                    return (
                        (filterTable?.searchByName !== ''
                            ? item.firstName.toLowerCase().includes(filterTable.searchByName.toLowerCase()) ||
                              item.lastName.toLowerCase().includes(filterTable.searchByName.toLowerCase())
                            : true) &&
                        (filterTable?.searchByEmail !== ''
                            ? item.email.toLowerCase().includes(filterTable.searchByEmail.toLowerCase())
                            : true) &&
                        (filterTable?.searchByCognitoId !== ''
                            ? item.cognitoId.toLowerCase().includes(filterTable.searchByCognitoId.toLowerCase())
                            : true)
                    );
                })
            );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2020-08-27
      • 2022-07-07
      • 2019-05-18
      • 2020-04-12
      • 2018-10-04
      相关资源
      最近更新 更多