Javascript是过滤具有多个条件参数的数组的最有效方法

Javascript是过滤具有多个条件参数的数组的最有效方法,javascript,filter,Javascript,Filter,我有两个可选参数,用于筛选数组 由于它们是可选的,所以我使用了两个if语句,但我很好奇是否有更高效/快捷的方法 // initializing list of users var users = [{ name: 'John', email: 'johnson@mail.com', age: 25, address: 'USA' }, { name: 'Tom', email: 'tom@mail.com', age: 35,

我有两个可选参数,用于筛选数组

由于它们是可选的,所以我使用了两个if语句,但我很好奇是否有更高效/快捷的方法

// initializing list of users
var users = [{
    name: 'John',
    email: 'johnson@mail.com',
    age: 25,
    address: 'USA'
  },
  {
    name: 'Tom',
    email: 'tom@mail.com',
    age: 35,
    address: 'England'
  },
  {
    name: 'Mark',
    email: 'mark@mail.com',
    age: 28,
    address: 'England'
  }
];


if (args.name){
    users = users.filter(x => x.name == args.name);
}

if (args.address){
    users = users.filter(x => x.address == args.address);
}

return users;

您可以使用
args
的条目

const entries = Object.entries(args);

return users.filter(user => entries.every(([k, v]) => user[k] === v));
也许是这样

if(args.name | | args.address){
users=users.filter(x=>x.name==args.name | | x.address==args.address);
}

您可以将条件组合到一个筛选语句中,以便只遍历数组一次:

函数过滤器(args){
//正在初始化用户列表
变量用户=[{
姓名:'约翰',
电邮:'johnson@mail.com',
年龄:25岁,
地址:美国
},
{
名字:“汤姆”,
电邮:'tom@mail.com',
年龄:35岁,
地址:英国
},
{
姓名:'马克',
电邮:'mark@mail.com',
年龄:28,
地址:英国
}
];
设条件=[];
if(args.name){
push(x=>x.name==args.name);
}
如果(参数地址){
push(x=>x.address==args.address);
}
返回users.filter(x=>conditionals.every(c=>c(x));

}
您可以根据需要创建助手函数,然后在代码中使用它

const用户=[{
姓名:'约翰',
电邮:'johnson@mail.com',
年龄:25岁,
地址:美国
},
{
名字:“汤姆”,
电邮:'tom@mail.com',
年龄:35岁,
地址:英国
},
{
姓名:'马克',
电邮:'mark@mail.com',
年龄:28,
地址:英国
}
];
//过滤函数
常量fltr=(对象,搜索)=>{
常数res=[];
for(设i=0;iconsole.log(res);
“速记”:这不是已经很短了吗?“高效”:您在计时方面有问题吗?我的意思是,老式的
for
循环速度最快,但您为什么要这样做?此外,有关性能和样式的问题更适合您,您可以创建一个方法,并将参数传递给要过滤数据的属性。