javascript - KeyValue管道之后的角度自定义过滤器管道
问题描述
在使用 Angular 的内置键值管道后,我正在尝试实现自定义过滤器
例如,我有一个包含值的数组
object= [
{ key: "Added_By", value: "Yi" },
{ key: "Assigned_To", value: "-" },
{ key: "Bought_Date", value: 43810 },
{ key: "Brand", value: "Samsung PM863" },
{ key: "Capacity", value: 3.84 },
]
我想根据多个传入值进行过滤,但传入值会有所不同,例如
它可能是 1 个键/值
Filter= [{ key: "Added_By", value: "Yi" }]// Return Object
或多个
Filter= [{ key: "Added_By", value: "Yi" }, { key: "Bought_Date", value: 43810 }] //both matches return object
Filter= [{ key: "Added_By", value: "ABC" }, { key: "Bought_Date", value: 43810 }] //1 match but 1 doesn't return false
如果满足所有条件,我想返回对象
对于我尝试过的单个键/值
let Key= Filter[0].key
let Value=Filter[0].value
let KeyFilter = object.filter(x => x.key === Key)
if (KeyFilter[0].value.toString().toLowerCase().indexOf(Value.toLowerCase()) !== -1)
return items
但是这种方法仅在过滤器数组中存在 1 个对象时才有效
解决方案
我创建了一个函数,它接受一个对象数组和一个带有键:值对的对象。
数组中对象的键必须与对象键匹配才能工作。
当我需要根据各种条件过滤数组时,我总是使用它。
export const filterArray = (filterData, toBeFiltered) => {
return toBeFiltered.filter(item => {
for (const key in filterData) {
if (item[key] === null || item[key] === undefined) {
return false;
} else {
if (typeof filterData[key] === 'string') {
if (!(item[key]).toLowerCase().includes((filterData[key].trim()).toLowerCase())) {
return false;
}
} else if (item[key] !== filterData[key]) {
return false;
}
}
}
return true;
});
};
希望能帮助到你。
推荐阅读
- django - 如何使用 Django/Celery 接收调用多个任务并收集任务状态
- javascript - SVG:更改 dy 属性不会更改父文本元素的边界矩形高度
- javascript - 内容安全策略脚本无法运行,被错误阻止
- angularjs - UI-ROUTER $mdDialog
- android - 亚马逊 App Store 上的应用内购买多年来都不起作用。怎么修?
- .htaccess - 301重定向页面,但前提是它没有参数
- angular - 语法错误,无法识别的表达式:/service-details/1139#overview Angular 5
- azure - Azure 逻辑应用筛选器数组操作是否支持多个条件?
- ruby - cassandra-web 安装失败:无法加载此类文件 -- 2.5/lz4ruby.so
- php - 浏览器不清除旧的个人资料图像,Codeigniter