如何在JavaScript中有效地将一个对象数组与另一个数组进行比较?
我有一个函数,在这个函数中,我必须返回一个带有匹配过滤器的元素数组。以下是功能代码:如何在JavaScript中有效地将一个对象数组与另一个数组进行比较?,javascript,arrays,typescript,ecmascript-6,Javascript,Arrays,Typescript,Ecmascript 6,我有一个函数,在这个函数中,我必须返回一个带有匹配过滤器的元素数组。以下是功能代码: filter_getCustomFilterItems(filterNameToSearch: string, appliedFilters: Array<any>) { let tempFilterArray = []; let masterFilterList = getMasterFilterList(); /* filterNameToSearch can be a
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
}
}
filter\u getCustomFilterItems(FilterNameSearch:string,appliedFilters:Array){
设tempFilterArray=[];
让masterFilterList=getMasterFilterList();
/*
filterNameToSearch可以是作为'Item2'或'Item3'的字符串`
主过滤器列表的类型为
主过滤器列表:数组=[
{
第1项:“某些项目-1”,
第2项:“某些项目-2”,
第3项:“某些项目-3”,
第4项:“某些项目-5”,
},
{
第1项:“某些项目-10”,
第2项:“某些项目-11”,
第3项:“某些项目-12”,
第4项:“某些-第13项”,
},......
];
AppliedFilter的类型为
appliedFilters:数组=[
{
名称:'Item1',
过滤器:[
{值:'some-item-1',状态:'selected'},
{值:'some-item-10',状态:'selected'}
]
},......
];
*/
for(让masterFilterList的masterFilterItem){
//这里缺少逻辑
}
}
我想过滤masterFilterList
以返回项目数组
filterNameToSearch='Item2'
在以下条件下:
1) 对于appliedFilters
中的每个数组元素(假设appliedFilterItem
),将appliedFilterItem.name
与masterFilterItem[appliedFilterItem.name]
进行比较,并检查appliedFilterItem
中的任何筛选器是否与masterFilterItem[appliedFilterItem.name]
具有相同的值
2) 该条件必须类似于masterFilterItem[appliedFilterItem[0]。名称]==appliedFilterItem[0]。过滤器[0]。值和appliedFilterItem[0]。过滤器[0]。状态=='selected'&&masterFilterItem[appliedFilterItem[1]。名称]==appliedFilterItem[1]。过滤器[0]。值和appliedFilterItem[1]。过滤器[0].status==“selected”,依此类推所有appliedFilterItems
。但是appliedFilters
中的元素数量是动态的
因此,请帮我解决这个问题?不清楚您需要的输出是什么,
masterFilterList
中的输出将是一个项目数组,并应用条件。如果给定filterNameToSearch=“Item2”,它必须返回主过滤器中的所有Item2
元素,并带有appliedFilters
中的条件。您所需的输出不清楚。输出将是masterFilterList
中的一组项目,并应用了条件。如果给定filterNameToSearch=“Item2”,它必须返回masterFilters
中的所有Item2
元素以及appliedFilters
return masterFilterList.map(el => el[filterNameToSearch])
.filter(value =>
appliedFilters.some(({name, filters}) =>
name === filterNameToSearch &&
filters.some(filter =>
filter.status === "selected" &&
filter.value === value
)
)
);