You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定属性数组过滤对象数组,保留至少一个属性值为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:24:03