如何基于指定属性数组过滤对象数组,保留至少一个属性值为true的项
问题解决说明
你之前的写法错误在于flags.includes(Object.keys(o))是尝试判断整个对象的键数组是否存在于flags数组中,逻辑完全不匹配:既没有遍历指定的标识字段,也没有判断对应字段的值是否为true。
正确修改方案
核心使用Array.some()方法遍历标识数组,只要任意一个标识对应的对象值为true,就保留该对象:
const flags = ['inventoryFlag', 'donateFlag']; const filteredData = data.filter(o => flags.some(flag => o[flag]));
完整可运行代码
const data = [ { itemID: '300', status: 'active', inventoryFlag: true, certifiedFlag: false, donateFlag: true }, { itemID: '400', status: 'inactive', inventoryFlag: true, certifiedFlag: true, donateFlag: false }, { itemID: '500', status: 'active', inventoryFlag: false, certifiedFlag: false, donateFlag: false }, { itemID: '600', status: 'active', inventoryFlag: false, certifiedFlag: true, donateFlag: true }, { itemID: '700', status: 'inactive', inventoryFlag: false, certifiedFlag: true, donateFlag: false } ]; const flags = ['inventoryFlag', 'donateFlag']; const filteredData = data.filter(o => flags.some(flag => o[flag])); document.getElementById("data").innerText = JSON.stringify(filteredData, null, 2);
<textarea id="data" rows="50" cols="100"></textarea>
以上代码过滤结果和你原硬编码判断的结果完全一致,会保留itemID为300、400、600的三条数据。
内容的提问来源于stack exchange,提问作者knot22
相关产品推荐
相关产品推荐

