Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中有效地将一个对象数组与另一个数组进行比较?_Javascript_Arrays_Typescript_Ecmascript 6 - Fatal编程技术网

如何在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
            )
         )
      );