首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JS滤波函数多重条件

JS滤波函数多重条件
EN

Stack Overflow用户
提问于 2022-02-23 05:52:04
回答 1查看 242关注 0票数 0

这可能是一个重复,但我似乎找不到一个堆叠的问题与我的确切问题。我在前端显示一个数据表,并允许用户通过多个可选变量进行筛选。因此,假设我的数据变量是这种格式的用户详细信息:

代码语言:javascript
复制
[
    {
        firstName = 'bob', 
        middleName = 'bruh', 
        lastName = 'bub'
    },
     .
     .
     .
    {
        firstName = 'sam', 
        middleName = 'marley', 
        lastName = 'jackson'
    }
]

现在我允许用户通过firstName、middleName和LastName进行过滤。但是他们也被允许只使用一个变量,或者这三个变量的任何一个组合来进行过滤。

我现在使用的天真方法是有7个if语句,根据用户输入筛选数组:

所以

代码语言:javascript
复制
let filterByFirstName = this.firstNameQuery !== null;
let filterByMiddleName = this.middleNameQuery !== null;
let filterByLastName = this.lastNameQuery !== null;

if(filterByFirstName && !filterByMiddleName && !filterByLastName)
//filter the array only by first name 

else if(filterByFirstName && filterByMiddleName && !filterByLastName)
// filter array by first and middle name 

.
.
.

else if(filterByFirstName && filterByMiddleName && filterByLastName) 
//filter array by first, middle and last name. 

所以在算法上,它足够有效,但不是为了代码的整洁,而是我将添加越来越多的变量来过滤。

我尝试过只创建一个过滤器语句,它将根据所提供的变量进行筛选,但我在编写它时遇到了困难。

代码语言:javascript
复制
let filterByFirstName = this.firstNameQuery !== null;
let filterByMiddleName = this.middleNameQuery !== null;
let filterByLastName = this.lastNameQuery !== null;

  this.displayArray = this.userArray.filter(
    user =>
      user.firstName === (filterByFirstName ? this.firstNameQuery : 'any String') &&
      user.middleName === (filterByMiddleName ? this.middleNameQuery : 'any String') &&
      user.lastName === (filterByLastName ? this.lastNameQuery : 'any String')
  );

因此,基本上我需要的是通配符或任何字符串的等效值,如果这是可能的话,就可以放入过滤器函数中。(预先谢谢:)

EN

回答 1

Stack Overflow用户

发布于 2022-02-24 12:28:47

也许是这样:

代码语言:javascript
复制
let filters = {firstName: 'John', middleName: 'Foo', lastName: null}
let data = [{firstName: 'John', middleName: 'Foo', lastName: 'Doe'}]

console.log(data.filter((item) => {
  for (const [key, value] of Object.entries(filters)) {
    if (value) return item[key] === value
  }
}))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71231943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档