Как отфильтровать вложенный, вложенный объект в JavaScript? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть этот объект:

{
  value: "something",
  data:  Array[{
     player: "simple name",
     properties: {
        age: "",
        favouriteColour: Array[{
           a: "1", 
           b: "2",
           c: Array[{
              0: "Problem 1",
              1: "Problem 2"
           }],
        },]
     } 
  },{
     player: "simple name",
     properties: {
        age: "",
        favouriteColour: Array[{
           a: "1", 
           b: "2",
           c: Array[{
              1: "Problem 2"
           }],
        },]
     } 
  },
 ]
}

Я хочу получить только те объекты, для которых есть значение «Задача 1». Прямо сейчас у меня есть эта структура в Массиве с 641 игроком, чтобы проверить объекты и принести только ту, у которой «Проблема 1».

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Добавлено решение проблемы, вы сильно зависите от структуры данных, и если она изменится, решение нужно будет изменить.

const toFilter = {
  value: 'something',
  data: [
    {
      player: 'simple name',
      properties: {
        age: '',
        favouriteColour: [
          {
            a: '1',
            b: '2',
            c: [
              {
                0: 'Problem 1',
                1: 'Problem 2'
              }
            ]
          }
        ]
      }
    },
    {
      player: 'simple name',
      properties: {
        age: '',
        favouriteColour: [
          {
            a: '1',
            b: '2',
            c: [
              {
                1: 'Problem 2'
              }
            ]
          }
        ]
      }
    }
  ]
}

const filtered = toFilter.data.reduce((acc, el) => {
  // hightly dependand on the data structure
  const colors = Object.values(el.properties.favouriteColour[0].c[0])
  const isValid = colors.includes('Problem 1')
  if (isValid) acc.push(el)

  return acc
}, [])

console.log('filtered:', filtered)
0 голосов
/ 02 октября 2019

Подумай об этом. Это на самом деле довольно просто.

Я предполагаю, что в конечном итоге это станет структурой JSON. Имея это в виду, проблема в том, что в JSON нельзя переходить от дочернего элемента к родительскому;вы можете переходить только от родителя к потомку.

Следовательно, вам действительно нужно только перебрать объект данных и посмотреть на каждый объект игрока. Для каждого объекта игрока проверьте, содержит ли properties.favoriteColour элемент "Problem 1". Если это так, запишите другие атрибуты этого объекта проигрывателя, которые вам нужны, или скопируйте их целиком, чтобы сохранить где-либо, в зависимости от того, что вы в конечном итоге захотите с ним сделать.

...