Подтвердить что ты не робот

Существует ли эквивалент Array # compact для пустых элементов?

Как мы все знаем, Array#compact удаляет элементы nil из массива.

array.reject { |element| element.empty? }

удалит пустые элементы, такие как [] (в рельсах вы также можете сделать #blank?, чтобы избавиться от пустых элементов и элементов nil).

Существует ли сокращенный метод удаления пустых/пустых элементов, таких как Array#compact? Или использует Array#reject лучший выбор?

Я не видел "пустой" эквивалент #compact, если он есть. Но, возможно, я просто не замечаю этого.

4b9b3361

Ответ 1

Да, есть!

array.reject &:empty?

Однако, как объяснили scarver2 и Hoang Le, это провалится с NoMethodError, если массив содержит nil.


Если вы используете Rails или Active Support, вы можете спокойно написать:

array.reject &:blank?

Не будет ошибки, поскольку все объекты отвечают на blank?, включая nil.

Существует и другой способ сделать это, как предложено mu слишком коротко:

array.select &:present?

Кажется, present? реализуется с точки зрения blank?, поэтому оба они подходят.