需要基于具有包含数组的多个值的过滤器对象来过滤阵列
var vendors = [
{
vendor_name: "John",
region: ["APAC", "UKDE"],
scanned_status: "Yes",
channel: ["FILE", "API"],
pii_attributes: ["A", "B"]
},
{
vendor_name: "Onir",
region: ["APAC", "LATAM"],
scanned_status: "No",
channel: ["FILE"],
pii_attributes: ["A", "C"]
},
{
vendor_name: "Suresh",
region: ["UKDE", "NA"],
scanned_status: "Yes",
channel: ["API"],
pii_attributes: ["C", "B"]
}
];
var filterCriteria = {
region: ["APAC", "LATAM"], // 'APAC', 'LATAM', 'NA', 'UKDE'
channel: ["API"], // 'API', 'FILE'
attributes: ["A", "B"],
scan_status: "Yes" // 'Yes', 'No', 'All'
};
let filtered_vendors = [];
var result = vendors.filter((el, index, arr) => {
if (
filterCriteria["region"].includes(el["region"]) &&
filterCriteria["channel"].includes(el["channel"]) &&
filterCriteria["attributes"].includes(el["pii_attributes"])
) {
filtered_vendors.push(el);
return true;
}
return false;
});
console.log(result);
console.log(filtered_vendors);
但是我无法在过滤器级别应用多次迭代来包含元素。想知道过滤数组的有效方法。
您也可以通过使用相同的键来采用动态方法filterCriteria
。
此方法检查过滤器值是否为数组,并迭代这些值并使用include进行检查。
如果没有数组,则直接比较该值。
var vendors = [{ vendor_name: "John", region: ["APAC", "UKDE"], scanned_status: "Yes", channel: ["FILE", "API"], pii_attributes: ["A", "B"] }, { vendor_name: "Onir", region: ["APAC", "LATAM"], scanned_status: "No", channel: ["FILE"], pii_attributes: ["A", "C"] }, { vendor_name: "Suresh", region: ["UKDE", "NA"],
scanned_status: "Yes", channel: ["API"], pii_attributes: ["C", "B"] }],
filterCriteria = { region: ["APAC", "LATAM"], channel: ["API"], pii_attributes: ["A", "B"], scanned_status: "Yes" },
filters = Object.entries(filterCriteria),
result = vendors.filter(o => filters.every(([k, value]) => Array.isArray(value)
? value.some(v => o[k].includes(v)) // change to every if all have to match
: o[k] === value
));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句