首页 > 解决方案 > 如果属性在另一个数组中并且值为 true,则过滤对象数组

问题描述

以下是产生所需输出的示例。

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 }
            ];
           
document.getElementById("data").innerText = JSON.stringify(data.filter(o => o.inventoryFlag || o.donateFlag));
<textarea id="data" rows="50" cols="100"></textarea>

我正在尝试找到一种方法在单独的数组中列出过滤标志,然后以.filter()某种方式使用它来获得与上述代码相同的结果集。

例如,以下是用于过滤的标志,并且在要包含在最终数据集中的对象中,至少有一个值必须为真 -

const flags = ['inventoryFlag', 'donateFlag'];

首先,我尝试了这个,但它没有做任何事情:

const filteredData = data.filter(o => flags.includes(Object.keys(o)));

标签: javascriptfilter

解决方案


在 内部filter,使用该some方法来检测包含在flags数组中的条目的任何属性键是否具有 的值true

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 result = data.filter(entry => 
  flags.some(flag => entry[flag] === true)
);

console.log(result);


推荐阅读