众所周知,Array#compact
会从数组中删除nil
个元素。
array.reject { |element| element.empty? }
会删除[]
之类的空元素(在rails中你也可以#blank?
删除空元素和 nil
元素。)
是否有一种简便方法可以删除Array#compact
之类的空/空元素?或者正在使用Array#reject
我最好的选择?
我还没有看到"空的"相当于#compact
,如果有的话。但也许我只是忽视它。
答案 0 :(得分:26)
是的!
array.reject &:empty?
但是,正如scarver2和Hoang Le所述,如果数组包含nil
,则会因NoMethodError
而失败。
如果您使用的是Rails或Active Support,则可以安全地写下:
array.reject &:blank?
由于所有对象都回复blank?
,including nil
。
根据mu is too short的建议,还有另一种方法可以做到这一点:
array.select &:present?
似乎present?
是根据blank?
实施的,因此两者都是合适的。
答案 1 :(得分:1)
从 Rails 6.1.3.1 开始,您有 compact_blank
:
array = ["", "a", nil]
array.compact_blank
#=> ["a"]
正如它在 Enumerable
上定义的那样,您也可以在散列上使用它。
答案 2 :(得分:0)
截至今天,Rails 6.1 现在支持 compact_blank