-1

我有这个对象:

{
  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”的对象。

4

2 回答 2

1

添加了问题的解决方案,您高度依赖数据结构,如果它发生变化,则需要更改解决方案。

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)

于 2019-10-02T20:52:15.400 回答
0

想想看。其实很简单。

我认为这最终将成为一个 JSON 结构。考虑到这一点,问题是在 JSON 中你不能从子级到父级。你只能从父级到子级。

因此,您实际上只需要遍历数据对象并查看每个玩家对象。对于每个玩家对象,检查是否properties.favoriteColour包含 item "Problem 1"。如果是这样,请记下您想要的该播放器对象的其他属性,或者将其完全复制到某个地方,这取决于您最终想要用它做什么。

于 2019-10-02T20:58:41.390 回答