首页 > 解决方案 > 过滤嵌套数组和对象

问题描述

我有一个包含 2 个复杂对象的数组:

(2) [{…}, {…}]

0:
  name: 'item1'
  data:
    fileExtension: undefined
    force_distribution: Array(9)
      0: {Fx: Array(76), x: Array(76), Fxcum: Array(76)}
      1: {y: Array(22), Fx: Array(22), Fxcum: Array(22)}
      2: {Fx: Array(92), z: Array(92), Fxcum: Array(92)}
      3: {x: Array(22), Fycum: Array(22), Fy: Array(22)}
      4: {y: Array(92), Fy: Array(92), Fycum: Array(92)}
      5: {Fy: Array(76), z: Array(76), Fycum: Array(76)}
      6: {x: Array(92), Fz: Array(92), Fzcum: Array(92)}
      7: {y: Array(76), Fz: Array(76), Fzcum: Array(76)}
      8: {Fz: Array(22), z: Array(22), Fzcum: Array(22)}
      length:9
1: 
  name: 'item2'
  data:
    fileExtension: undefined
    force_distribution: Array(9)
      0: {Fx: Array(76), x: Array(76), Fxcum: Array(76)}
      1: {y: Array(22), Fx: Array(22), Fxcum: Array(22)}
      2: {Fx: Array(182), z: Array(182), Fxcum: Array(182)}
      3: {x: Array(22), Fycum: Array(22), Fy: Array(22)}
      4: {y: Array(182), Fy: Array(182), Fycum: Array(182)}
      5: {Fy: Array(76), z: Array(76), Fycum: Array(76)}
      6: {x: Array(182), Fz: Array(182), Fzcum: Array(182)}
      7: {y: Array(76), Fz: Array(76), Fzcum: Array(76)}
      8: {Fz: Array(22), z: Array(22), Fzcum: Array(22)}
      length:9

如果用户选择 x 和 Fx 有没有办法在不使用循环的情况下轻松获得以下内容?我知道如何使用过滤器,但我很难应用于嵌套数组和对象。

0:
  name: 'item1'
  data:
    fileExtension: undefined
    force_distribution: Array(9)
      0: {Fx: Array(76), x: Array(76), Fxcum: Array(76)}
      length:1
1: 
  name: 'item2'
  data:
    fileExtension: undefined
    force_distribution: Array(9)
      0: {Fx: Array(76), x: Array(76), Fxcum: Array(76)}
      length:1

标签: arraystypescriptobjectfilter

解决方案


我不清楚您的过滤器逻辑是什么(您说用户选择xFy但示例结果中有带有xand的项目Fx)但您始终可以使用 amap和一些东西,同时使用object spreadfilter复制其余部分:

const filtered = original.map(item => ({
  ...item, // not needed if top level array items only have 'data' key
  data: {
    ...item.data,
    force_distribution: item.data.force_distribution.filter(/* your filter logic here */)
  }
}));

推荐阅读