Существует ли эквивалент Array # compact для пустых элементов?
Как мы все знаем, Array#compact
удаляет элементы nil
из массива.
array.reject { |element| element.empty? }
удалит пустые элементы, такие как []
(в рельсах вы также можете сделать #blank?
, чтобы избавиться от пустых элементов и элементов nil
).
Существует ли сокращенный метод удаления пустых/пустых элементов, таких как Array#compact
? Или использует Array#reject
лучший выбор?
Я не видел "пустой" эквивалент #compact
, если он есть. Но, возможно, я просто не замечаю этого.
Ответы
Ответ 1
Да, есть!
array.reject &:empty?
Однако, как объяснили scarver2 и Hoang Le, это провалится с NoMethodError
, если массив содержит nil
.
Если вы используете Rails или Active Support, вы можете спокойно написать:
array.reject &:blank?
Не будет ошибки, поскольку все объекты отвечают на blank?
, включая nil
.
Существует и другой способ сделать это, как предложено mu слишком коротко:
array.select &:present?
Кажется, present?
реализуется с точки зрения blank?
, поэтому оба они подходят.