![](/img/trans.png)
[英]How to filter an array of objects based on multiple properties in JavaScript/Typescript?
[英]Filter an array of objects based on multiple conditions in typeScript
嗨,團隊,我有一系列對象,例如
data = [
{ name: "Pork", category: "Food", subcategory: "Meat" },
{ name: "Pepper", category: "Food", subcategory: "Vegetables" },
{ name: "Beef", category: "Food", subcategory: "Meat" },
{ name: "banana", category: "Food", subcategory: "Fruit" }
];
這里我需要根據過濾條件過濾data
數組
{
"filters":[
{
"filters":[
{
"field":"subcategory",
"operator":"eq",
"value":"Vegetables"
}
],
"logic":"or"
},
{
"filters":[
{
"field":"name",
"operator":"eq",
"value":"Pepper"
},
{
"field":"name",
"operator":"eq",
"value":"banana"
}
],
"logic":"or"
}
],"logic":"and"
}
我可以簡單地在Kendo
使用process()
來做到這一點
kendo.data.Query.process(data, {
filter: {
logic: "and",
filters: [{
field: "subcategory",
value: "Meat",
operator: "eq"
}],logic:"or"
}
});
那么有沒有其他方法可以在不使用process()
情況下進行這樣的過濾?
這種方法采用包含數組和邏輯部分的filters
對象作為條件的量詞。
該數組可以包含具有filters
量詞作為logic
其他對象,或者具有單個屬性約束的對象,這些屬性必須匹配給定數據數組的項目。
實際上只實現了一個操作符。
const operators = { eq: (a, b) => a === b }, quantifiers = { and: 'every', or: 'some' }, filter = ({ filters, logic }) => item => filters[quantifiers[logic]](f => 'filters' in f ? filter(f)(item) : operators[f.operator](item[f.field], f.value) ), filters = { filters: [{ filters: [{ field: "subcategory", operator: "eq", value: "Vegetables" }], logic: "or" }, { filters: [{ field: "name", operator: "eq", value: "Pepper" }, { field: "name", operator: "eq", value: "banana" }], logic: "or" }], logic: "and" }, data = [{ name: "Pork", category: "Food", subcategory: "Meat" }, { name: "Pepper", category: "Food", subcategory: "Vegetables" }, { name: "Beef", category: "Food", subcategory: "Meat" }, { name: "banana", category: "Food", subcategory: "Fruit" }], result = data.filter(filter(filters)); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.