【问题标题】:How to filter a nested, nested object in JavaScript?如何在 JavaScript 中过滤嵌套的嵌套对象?
【发布时间】:2020-02-01 04:08:29
【问题描述】:

我有这个对象:

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

【问题讨论】:

  • 如果属性结构不变,循环然后检查匹配是相当简单的
  • 你能添加你迄今为止尝试过的东西吗?另外,您可以发布您的对象的有效 javascript 定义吗?
  • 我试图简化,因为它是一个很大的 json。看起来我最终搞砸了缩进。

标签: javascript arrays filter nested-object


【解决方案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)

【讨论】:

    【解决方案2】:

    考虑一下。其实很简单。

    我假设这最终会变成一个 JSON 结构。考虑到这一点,问题是在 JSON 中你不能从子级到父级。你只能从父级到子级向下。

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

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2020-07-28
      • 1970-01-01
      相关资源
      最近更新 更多