根据多键过滤数组:如何同时按宗教、性别和记录号筛选人员数组
多字段过滤人员数组的实现方法
当然可以实现!针对你给出的PEOPLE数组,咱们可以利用JavaScript原生的Array.filter()方法,同时对Religion、Gender和RecordNumber三个字段设置过滤条件,轻松筛选出符合要求的条目。下面给你两种实用的实现方式:
1. 固定条件过滤(明确所有过滤字段)
如果你的过滤条件是固定的(比如明确要找宗教为某值、性别为某值、记录号为某值的人员),直接写死判断逻辑就行:
// 假设你的PEOPLE数组已经定义好了 const PEOPLE = [ { "Id": 1270, "FirstName": "Alice", "LastName": "Smith", "Religion": "Christianity", "RecordNumber": 1, "Gender": "female", "Contacted": false }, { "Id": 1383, "FirstName": "Bob", "LastName": "Jones", "Religion": "Islam", "RecordNumber": 2, "Gender": "male", "Contacted": true } ]; // 定义固定的过滤条件 const targetReligion = "Christianity"; const targetGender = "female"; const targetRecordNumber = 1; // 执行过滤 const filteredPeople = PEOPLE.filter(person => { return person.Religion === targetReligion && person.Gender === targetGender && person.RecordNumber === targetRecordNumber; }); console.log(filteredPeople); // 输出符合所有条件的人员对象
2. 灵活条件过滤(支持任意数量的过滤字段)
如果有时候你可能不需要过滤所有三个字段(比如只过滤宗教和性别,记录号不限),可以写一个通用的过滤函数,让它支持动态传入过滤条件:
function filterPeople(peopleList, filters) { return peopleList.filter(person => { // 遍历所有传入的过滤条件,只有当所有条件都匹配时才保留该条目 return Object.entries(filters).every(([fieldName, targetValue]) => { return person[fieldName] === targetValue; }); }); } // 示例1:同时过滤三个字段 const result1 = filterPeople(PEOPLE, { Religion: "Islam", Gender: "male", RecordNumber: 2 }); // 示例2:只过滤宗教和性别,忽略记录号 const result2 = filterPeople(PEOPLE, { Religion: "Christianity", Gender: "female" }); // 示例3:只过滤记录号 const result3 = filterPeople(PEOPLE, { RecordNumber: 1 });
额外提示
如果你的字段值可能存在null、undefined或者空字符串的情况,可以稍微修改判断逻辑,比如允许过滤条件为空时自动跳过该字段:
function filterPeople(peopleList, filters) { return peopleList.filter(person => { return Object.entries(filters).every(([fieldName, targetValue]) => { // 如果过滤条件的值为空,直接跳过该字段的判断 if (!targetValue) return true; return person[fieldName] === targetValue; }); }); }
内容的提问来源于stack exchange,提问作者Mouna
相关产品推荐
相关产品推荐

