如何根据字符串指定的多字段条件筛选匹配数据
动态字段匹配筛选数据数组实现方案
需求概述
需要根据请求对象中match字段指定的单个或多个字段,对待筛选数据数组进行精准匹配筛选:
match字段支持单个字段(如"phone")或多个逗号分隔的字段(如"phone,email")- 仅保留那些在
match指定的所有字段上,值与请求对象对应字段完全匹配的数组项 - 请求对象中未被
match指定的字段,无论值是什么都不参与筛选判断
实现代码(JavaScript)
function filterDataByMatch(request, dataArray) { // 拆分match字段为字段列表,去除可能的空格 const matchFields = request.match.split(',').map(field => field.trim()); return dataArray.filter(item => { // 检查match指定的所有字段是否都匹配 return matchFields.every(field => { // 请求对象中该字段的值(空字符串也参与匹配) const requestValue = request[field]; // 数组项对应字段的值 const itemValue = item[field]; return requestValue === itemValue; }); }); }
示例验证
示例1:单个字段匹配
请求对象:
const request1 = { name: "abc", email: "", phone: "123456", match: "phone" };
待筛选数组:
const data = [ {name: "abc", email: "abc@gmail.com", phone:"123456"}, {name: "abc", email: "abc@gmail.com", phone:"1236"}, {name: "pqr", email: "pqr@gmail.com", phone:"123456"} ];
调用函数:filterDataByMatch(request1, data)
输出结果:
[ {name: "abc", email: "abc@gmail.com", phone:"123456"}, {name: "pqr", email: "pqr@gmail.com", phone:"123456"} ]
示例2:多个字段匹配(请求类型1)
请求对象:
const request2 = { email: "pqr@gmail.com", phone: "123456", match: "phone,email" };
调用函数:filterDataByMatch(request2, data)
输出结果:
[{name: "pqr", email: "pqr@gmail.com", phone:"123456"}]
示例3:多个字段匹配(请求类型2)
请求对象:
const request3 = { name: "abc", email: "abc@gmail.com", phone: "1236", match: "phone,email" };
调用函数:filterDataByMatch(request3, data)
输出结果:
[{name: "abc", email: "abc@gmail.com", phone:"1236"}]
代码说明
match.split(',').map(field => field.trim()):处理match字段,拆分并去除字段名前后可能的空格,兼容如"phone, email"这种带空格的输入dataArray.filter():遍历数组筛选符合条件的项matchFields.every():确保match指定的所有字段都满足匹配条件,只要有一个字段不匹配就会排除该项- 严格相等匹配
===:保证值的类型和内容完全一致,若需要宽松匹配可改为==
内容的提问来源于stack exchange,提问作者rahul5140
相关产品推荐
相关产品推荐

