Фильтровать вложенные массивы и объекты - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть массив, содержащий 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

1 Ответ

0 голосов
/ 27 апреля 2018

Мне не ясно, какова ваша логика фильтра (вы говорите, что пользователь выбирает x и Fy, но в примере результата есть элементы с x и Fx), но вы всегда можете использовать map и filter некоторые вещи при копировании остальных с использованием объекта распространения :

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 */)
  }
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...