繁体   English   中英

在具有多个属性名称和值的嵌套对象数组中查找对象数组

[英]find in array of objects with nested array of objects with multiple property name and value

我有这样的对象数组

[{
    property1: 'test',
    property2: 'test',
    filter: [{
        fil1: 1,
        fil2: 2,
        fil3: 3
      },
      {
        fil1: 56,
        fil2: 3,
        fil3: 34
      },
      {
        fil1: 23,
        fil2: 88,
        fil3: 6
      }
    ]
  },
  {
    property1: 'test2',
    property2: 'test2',
    filter: [{
        fil1: 44,
        fil2: 5,
        fil3: 99
      },
      {
        fil1: 333,
        fil2: 7,
        fil3: 888
      },
      {
        fil1: 10,
        fil2: 5,
        fil3: 688
      }
    ]
  }
]

如您所见,我有两个对象。 每个 object 都有带对象的嵌套数组。 如果我在嵌套对象数组中搜索一些属性,我想获得 main object。

例如fil1:56,fil2:3,我需要在第一场比赛中获得第一个主要的object。 但有窍门。 嵌套对象内的属性名称是动态的,有时我需要通过一个属性或 5 个属性进行搜索。 我像这样搜索 object

{
  fil2: 2,
  fil3: 3
}

输入此搜索 object 将返回数组中的第一个主要 object。

data.find((el) => el.filter.some((el_n) => !Object.entries(search).some(([key, value]) => el_n[key] != value)));

其中data是可搜索的对象数组, search是搜索 object。这将从data中返回第一个匹配的 object。

这将适用于filter数组元素内或搜索 object 中的任意数量的键。

例如:

{
    fil1: 5,
    fil2: 5,
    fil3: 686,
    fil4: 686,
    search_by_this_key: 34,
    ...
}

在大型数据集上过滤 arrays 客户端会影响性能,在这种情况下,您可能需要查看后端解决方案。

我不确定我会回答你的问题,但我会尝试。 无论如何,您能否提供有关该问题的更多详细信息? 例如,属性是“动画的”是什么意思?

好的...在您的示例中,数组中有 2 个元素,因此firstindex可以是 0 或 1。每个元素都是一个具有 3 个键 ( key1 ) 的字典:property1、property2、filter。 filter 是一个包含 3 个字典( secondindex )的数组:0,1 和 2 这些最后的字典每个有 3 个键/值( key2 ):fil1,fil2,fil3

# Model: array_name[firstindex][key1][secondindex][key2]

array_name[0]["property1"]
array_name[0]["property2"]
array_name[0]["filter"]
array_name[0]["filter"][1]
array_name[0]["filter"][1]["fil2"]

您可以通过打印在您的代码中尝试:

print(array_name[0]["property1"],
      array[0]["property2"],
      array[0]["filter"],
      array[0]["filter"][1],
      array[0]["filter"][1]["fil2"])

并迭代一个for循环

祝你好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM