gpt4 book ai didi

ruby-on-rails - 我如何检查类或 json 对象中的所有属性/值是否为 nil

转载 作者:太空宇宙 更新时间:2023-11-03 17:29:25 24 4
gpt4 key购买 nike

我有一个方法可以从 API 检索 elasticsearch 查询并将其转换为 JSON 对象数组。

在某些情况下,最后一个 JSON 对象不是 nil 对象,而是所有的属性都是 nil 值。

我想避免映射到每个对象,但我需要过滤掉那些具有所有 nil 值的 JSON 对象。

例如:

=> [#<Api::User:0x006546546
@user_id=1,
@height=70,
@age=25>,
#<Api::User:0x006546542
@user_id=nil
@height=nil
@age=nil>]

我想从数组中删除 all-nil 对象,无论它是 JSON 格式还是在它转换为 Api::User 对象数组之后。

map 是检查所有对象的所有值的唯一方法还是资源密集度较低的方法?

最佳答案

我会非常依赖 EnumerableObject 为您提供的方法。从 Enumerable 中,我们可以使用 select 来仅选择满足某些条件的数组元素。该条件是至少有一个实例变量不是nil,为此我们可以使用any?

Object 我们将使用 instance_variables 获取实例变量的集合,我们将使用 instance_variable_get 访问这些实例变量的值.

它看起来像这样:

filtered_array = array.select do |object| 
object.instance_variables.any? { |var| object.instance_variable_get(var) }
end

当然 any? 是高效的,因为它会停止迭代并在第一个“truthy”变量上返回 true。正如 SteveTurczyn 所建议的,如果您只需要检查最后一个值,它会更快。

filtered_array = array[0..-2] if array[-1].instance_variables.none? { |var| object.instance_variable_get(var) }

关于ruby-on-rails - 我如何检查类或 json 对象中的所有属性/值是否为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50377911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com