数组连接逗号,仅当元素不是nil时

Gho*_*der 5 ruby arrays join

有没有明星向前的方法来实现array.join(", ")逗号只包含在存在的元素之间?即,如果数组中不存在某些元素,我最终不会获得孤立逗号?

Sid*_*Sid 18

例:

["", nil, "test word", 5, 7, nil, "", nil, "", 7, 6, ""] => "test word, 5, 7, 7, 6"

编辑:请注意,这里的第一个方法需要Ruby on Rails.将第二种方法用于仅支持Ruby的解决方案

你可以试试这个删除这两个nil和空字符串"",然后用逗号连接(它消除了所有的nil值用compact,那么它split""创建一个二维数组,其中任何""第一个数组中的元素是新的二维数组中只是空数组,然后它flatten会将2D数组转换回正常数组,但删除了所有空数组,最后它执行join(", ")此数组):

> array.compact.split("").flatten.join(", ")


array = ["", nil, "test word", 5, 7, nil, "", nil, "", 7, 6, ""]

array.compact => ["", "test word", 5, 7, "", "", 7, 6, ""].split("") => [[], ["test word", 5, 7], [], [7, 6], []].flatten => ["test word", 5, 7, 7, 6].join(", ") => "test word, 5, 7, 7, 6"
Run Code Online (Sandbox Code Playgroud)

编辑:另一种方式是:

> array.reject(&:blank?).join(", ")


array = ["", nil, "test word", 5, 7, nil, "", nil, "", 7, 6, ""]

array.reject(&:blank?) => ["test word", 5, 7, 7, 6].join(", ") => "test word, 5, 7, 7, 6"
Run Code Online (Sandbox Code Playgroud)

  • 第二个可能更简洁:`array.reject(&:blank?).join(",")` (2认同)

dan*_*zzz 8

我认为你的数组中有nil个元素.你可以这样做:

arr.compact.join(", ")
Run Code Online (Sandbox Code Playgroud)