如何过滤对象数组的数组?

我想过滤一个对象数组的数组,但是没有成功。

   constructNewGrid(filterText){
      if(searchText == ""){
        this.constructedGrid = this.fullGrid;
        return;
      }
      this.constructedGrid = [];
      this.constructedGrid = this.fullGrid.filter(array => array.filter(obj => {
        if(obj.name == filterText)
          return obj;
      }));
      console.log(this.constructedGrid);
   }

我想返回一个数组,如果找到一个正确的对象,就返回一个数组,但是当我在控制台记录时,它的结果是 constructedGrid同样的数组,但为什么呢?代码应该去第一个数组应该查找是否有一个对象的名称等于过滤文本,它应该返回数组与corrosponding对象,然后下一个数组应该检查,以此类推。

这,将是格式。

[ 
  [[{name: string}], empty, empty], // array of lenth 3 
  [empty, empty, [{name: string}], empty], // array of length 4 
   ... 
]

如果找到了一个对象,就把它分别推到一个数组里 如果在同一个数组里找到了两个对象,就把它们分别推到两个单独的数组里 然后把它们放在一个数组里:

[
 [[obj1]],
 [[obj2]],
 ...
]

对我来说,这似乎是可能的。我有时会得到一个错误,我是出了内存哈哈……

解决方案:

你需要 map 除了 filter因为 filter 只是决定是否保留现有的东西,它不 变化 那里的东西。map 的东西。类似这样的。

  this.constructedGrid = this.fullGrid
      // Map the inner array to one that only has matching entries
      .map(array => array.filter(obj => obj && obj.name === filterText))
      // Remove blank inner arrays from the overall array
      .filter(array => array.length);

活例。

const fullGrid = [ 
  [[{name: "target"}], , ],
  [, null, [{name: "target"}], undefined],
];
const filterText = "target";

const constructedGrid = fullGrid
      // Map the inner array to one that only has matching entries
      .map(array => array.filter(obj => obj && obj[0] && obj[0].name === filterText))
      // Remove blank inner arrays from the overall array
      .filter(array => array.length);
console.log(constructedGrid);
.as-console-wrapper {
    max-height: 100% !important;
 }

给TA打赏
共{{data.count}}人
人已打赏
未分类

数据组中的限定关系

2022-9-9 1:06:19

未分类

通用参数'Result'无法用RxSwift推断。

2022-9-9 1:06:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索