当前位置: 首页 > 面试题库 >

React中的多个过滤器

陈法
2023-03-14
问题内容

我正在建立一个显示api数据的项目,现在我需要对其进行过滤。

我已经完成了类别过滤器,现在我必须做一个价格范围过滤器,以便这两个过滤器可以一起工作,但是我在努力正确地做到这一点。对于价格范围过滤器,我使用2个输入和一个Submit按钮。

我得到了一系列对象,看起来像这样;

filterData = [
  { name: 'Aang', bender: 'yes', nation: 'Air', person: 'yes', show: 'ATLA', price: 132342 },
  { name: 'Appa', bender: 'yes', nation: 'Air', person: 'no', show: 'ATLA', price: 1322 },
  { name: 'Asami', bender: 'no', nation: 'Republic City', person: 'yes', show: 'LOK', price: 132342 },
  { name: 'Azula', bender: 'yes', nation: 'Fire', person: 'yes', show: 'ATLA', price: 12342 }, etc]

我有状态:

state = {
        data: [],
        nation: '',
        priceStart: '',
        priceEnd: ''
    }

如果我的弯管机状态已更改,则设置状态的功能另外,对于开始状态和结束状态,也有类似的功能当我为价格设置状态时,我会解析它,所以我有一个状态,顺便说一句,每次输入一些数字时,我都会收到警告然后删除它,说收到’value’属性的NaN

 chFilter = (type, val) => {
        switch(type) {
            case 'nation':
                this.setState({ nation: val });
                break;
            case 'priceStart':
                this.setState({ priceStart: val });
                break;
            case 'priceEnd':
                this.setState({ priceEnd: val });
                break;
            default:
                break;
        }
    }



getBenders = () => {
        const { data, category, priceStart, priceEnd } = this.state;
        if( nation || priceStart || priceEnd ){
             return data.filter(this.filterBender);
        } else {
           return data;
        }
    }

    filterBender = data => {
        let { nation, priceStart, priceEnd } = this.state;

        if(data.nation !== nation) return false;
        if(data.price < priceStart) return false;
        return true;
    }

我认为我需要对所有状态执行一个通用功能,以便它可以监视状态变化并返回过滤后的数据。帮助正确地做到这一点


问题答案:

您应该编写一个新的过滤器功能,将这些过滤器合并在一起。并像这样使用它:

filterBender = data => {
    const {bender, person, nation} = this.state;
    if(bender && data.bender !== bender) return false;
    if(person && data.person !== person) return false;
    if(nation && data.nation !== nation) return false;
    ...
    return true;
}

const visibelBenders = filterData.filter(filterBender);

这样,您将只过滤一次数据,并且每个弯曲器都会针对每个约束条件进行一次评估。最后,只有对所有不同if都返回true的弯曲器将插入到visibelBenders数组中,您可以对其进行渲染。此外,如果其中一个过滤器发生了更改,则可以将其包装到一个记忆函数中以仅执行它。

要显示所有弯曲器,如果未设置过滤器,则可以将过滤器包装到新功能中,以检查是否启用了过滤器。

const getBenders = () => {
    const { bender, person, nation} = this.state;
    if( person || bender || nation ){
         return this.filterData.filter(filterBender);
    } else {
       return this.filterData;
    }
}
const benders = getBenders();


 类似资料:
  • 问题内容: 我正在尝试建立一个查询,该查询将找到所有用户文档(docType =用户),然后根据许多过滤器对其进行过滤。例如位置,性别,年龄等。过滤器是根据我正在构建的搜索功能上的用户输入来添加/删除的。 以下没有结果: 以下返回结果: 后者虽然返回结果,但从长远来看是行不通的,因为我可能想为年龄,性别等添加一个额外的过滤器,而且我似乎无法添加多个字段。如果我删除位置过滤器,则第一个查询有效。 问

  • 问题内容: 我想在一个实体上使用多个Hibernate过滤器,我尝试了所有没有失败的逻辑,Google以及Hibernate文档都对此提出了不足。我无法想象这是不可能的。(使用Java 6 Hibernate 4.1.9.final) 目前,我有这个: 我想向Testcase类添加第二个独立过滤器。我所追求的是这样的: 这是我尝试过的 我试图像这样向TestCase添加多个@FilterDefs,

  • 我想要找到合适的正则表达式匹配的行数。输入是通过Java Stream插入的日志文件。我想对这个流应用多个过滤器,但每隔一段时间计算一次。

  • 如何在elasticsearch中使用与聚合相关的过滤器? 官方文档只给出了过滤器和聚合的小例子,没有对查询dsl进行正式描述——例如,将其与postgres文档进行比较。 通过尝试,我发现以下查询被elasticsearch接受(没有解析错误),但忽略了给定的过滤器: 有些人建议使用查询而不是过滤。但官方文件通常建议对精确值进行过滤。查询的另一个问题是:虽然过滤器提供了和,但查询不提供。 有人能

  • 问题内容: 我正在尝试使用Pandas在几个条件下进行布尔索引。我原来的DataFrame称为。如果执行以下操作,将得到预期的结果: 但是,如果我这样做(我认为应该是等效的),则不会返回任何行: 知道导致差异的原因是什么? 问题答案: 使用是因为运算符优先级: 或者,在单独的行上创建条件: 样品 :

  • 问题内容: 我正在研究AngularJS教程,并了解的基础知识 但是,开箱即用的实现似乎仅限于将项目列表过滤为输入的确切单词或短语。 示例:如果查询是“ table cloth”,则结果列表可以包含带有短语“ Decorative table cloth”的结果,但由于过滤器只是一个连续的搜索字符串,因此将不包括“ Table fortable装饰布”。 我知道可以添加自定义过滤器,但乍一看似乎主