我有一个函数,我必须返回具有匹配过滤器的元素数组。函数代码如下:
filter_getCustomFilterItems(filterNameToSearch: string, appliedFilters: Array<any>) {
let tempFilterArray = [];
let masterFilterList = getMasterFilterList();
/*
filterNameToSearch can be a string either as `Item2` or `Item3`
masterFilterList will be of type
masterFilterList: Array<any> = [
{
Item1: 'some-item-1',
Item2: 'some-item-2',
Item3: 'some-item-3',
Item4: 'some-item-5',
},
{
Item1: 'some-item-10',
Item2: 'some-item-11',
Item3: 'some-item-12',
Item4: 'some-item-13',
},......
];
appliedFilters will be of type
appliedFilters: Array<any> = [
{
name: 'Item1',
filters: [
{value: 'some-item-1', status: 'selected'},
{value: 'some-item-10', status: 'selected'}
]
},......
];
*/
for (let masterFilterItem of masterFilterList) {
//Missing logic here
}
}
我想过滤masterFilterList
以返回一个项目数组
filterNameToSearch = 'Item2'
在以下条件下:
1) 对于 appliedFilters
中的每个数组元素(假设 appliedFilterItem
),将 appliedFilterItem.name
与 masterFilterItem[appliedFilterItem.name ]
并检查 appliedFilterItem
中的任何过滤器是否与 masterFilterItem[appliedFilterItem.name]
2) 条件必须类似于 masterFilterItem[appliedFilterItem[0].name] == AppliedFilterItem[0].filters[0].value && AppliedFilterItem[0].filters[0].status === '选中' && masterFilterItem[appliedFilterItem[1].name] == AppliedFilterItem[1].filters[0].value && AppliedFilterItem[1].filters[0].status === '选中' 等等对于所有应用的FilterItems
。但 appliedFilters
中的元素数量是动态的。
请帮我解决这个问题吗?
最佳答案
return masterFilterList.map(el => el[filterNameToSearch])
.filter(value =>
appliedFilters.some(({name, filters}) =>
name === filterNameToSearch &&
filters.some(filter =>
filter.status === "selected" &&
filter.value === value
)
)
);
关于javascript - 如何在 JavaScript 中有效地比较一个对象数组与另一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47990261/