3 回答

TA贡献1884条经验 获得超4个赞
您可以将约束信息移到过滤器数组中,并通过检查所有(与条件)约束来进行过滤,Array#every如果需要或仅需一些约束(或条件),则采用Array#some。
var data = [{ orderNumber: 1010, area: "JAPAN", category: "orange", orderApprover: "John Smith" }, { orderNumber: 1020, area: "EM-JAPAN", category: "red", orderApprover: "Paul Smith" }, { orderNumber: 1013, area: "EMEA", category: "orange", orderApprover: "Mike Smith" }, { orderNumber: 1140, area: "APAC", category: "yellow", orderApprover: "Jake Smith" }],
filters = [
o => o.orderNumber.toString().includes('10'),
o => o.area.includes('EM')
],
result = data.filter(o => filters.every(fn => fn(o)));
console.log(result);

TA贡献1810条经验 获得超5个赞
您可以使用过滤器,但是由于orderNumber是整数toString,因此可以将其转换为字符串,然后用于includes检查值是否包含所需的数字
var allData = {
"items": [{
"orderNumber": 1010,
"area": "JAPAN",
"category": "orange",
"orderApprover": "John Smith"
},
{
"orderNumber": 1020,
"area": "EM-JAPAN",
"category": "red",
"orderApprover": "Paul Smith"
},
{
"orderNumber": 1013,
"area": "EMEA",
"category": "orange",
"orderApprover": "Mike Smith"
},
{
"orderNumber": 1140,
"area": "APAC",
"category": "yellow",
"orderApprover": "Jake Smith"
}
]
}
let data = allData.items.filter(item => item.orderNumber.toString().includes('10'));
console.log(data)
您可以进一步微调过滤器回调以集成对EM的搜索

TA贡献1848条经验 获得超6个赞
通过将过滤条件放置在外部阵列中,我们可以获得动态过滤。在我的示例中,它是filterCond数组。
然后遍历过滤条件数组,并检查对象属性的每个值是否与同一索引中filterCond数组中的数据匹配。
如果条件为false,则增加一个计数器,如果counter大于0,则返回false。
应根据对象中键的索引放置条件。
var allData = {"items":[{ orderNumber: 1010, area: "JAPAN", category: "orange", orderApprover: "John Smith" }, { orderNumber: 1020, area: "EM-JAPAN", category: "red", orderApprover: "Paul Smith" }, { orderNumber: 1013, area: "EMEA", category: "orange", orderApprover: "Mike Smith" }, { orderNumber: 1140, area: "APAC", category: "yellow", orderApprover: "Jake Smith" }]};
function getFilteredData(allData, filterCond){
return allData.items.filter((itm) =>{
count = 0;
filterCond.forEach((cond, idx) => {
count = Object.values(itm)[idx].toString().includes(cond) === false ? count + 1: count;
})
return count === 0;
});
}
console.log("Filtering by orderNumber 10 and area EM");
let filterCond = ["10", "EM"];
console.log(getFilteredData(allData, filterCond));
console.log("Filtering by orderNumber 114");
filterCond = [114];
console.log(getFilteredData(allData, filterCond));
console.log("Filtering by only orderNumber 10");
filterCond = [10];
console.log(getFilteredData(allData, filterCond));
console.log("Filtering by only area APAC");
filterCond = [, "APAC"]; //leaving first criteria blank
console.log(getFilteredData(allData, filterCond));
添加回答
举报