javascript - 如何在 JavaScript 中有效地比较一个对象数组与另一个数组?

标签 javascript arrays typescript ecmascript-6

我有一个函数,我必须返回具有匹配过滤器的元素数组。函数代码如下:

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.namemasterFilterItem[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/

相关文章:

c++ - 大数组上的段错误

c++ - array[0] = 0 这怎么可能?

javascript - @reduxjs/toolkit 和 Typescript 出错 - TS1005

javascript - 我保证链接正确吗?

javascript - 如何在 "a tag"中添加鼠标悬停(光标)的条件超过三秒?

c - Array - 在 C 中按模数组排序

javascript - typescript |关于缺少函数返回类型的警告,ESLint

typescript 没有从模块的 index.d.ts 中找到类型

javascript - 我想使用 onclick 事件将 HTML 从 'OFF' 更改为 'ON',就像切换一样

javascript - 单击弹出窗口外的选择框关闭弹出窗口