开发者

Ruby (Rails): remove whitespace from each array item

I found this code:

开发者_StackOverflow中文版
.each_key {|a| self[a].strip! if self[a].respond_to? :strip! }

...but it is for a hash, whereas I am trying to do the same with an array.


This is what collect is for.

The following handles nil elements by leaving them alone:

yourArray.collect{ |e| e ? e.strip : e }

If there are no nil elements, you may use:

yourArray.collect(&:strip)

...which is short for:

yourArray.collect { |e| e.strip }

strip! behaves similarly, but it converts already "stripped" strings to nil:

[' a', ' b ', 'c ', 'd'].collect(&:strip!)
=> ["a", "b", "c", nil]

https://ruby-doc.org/core/Array.html#method-i-collect

https://ruby-doc.org/core/String.html#method-i-strip


If you don't mind first removing nil elements:

YourArray.compact.collect(&:strip) 

https://ruby-doc.org/core/Array.html#method-i-compact


If you are using Rails, consider squish:

Returns the string, first removing all whitespace on both ends of the string, and then changing remaining consecutive whitespace groups into one space each.

yourArray.collect(&:squish)


Adapting the approach you found, from working on a hash to working on an array:

[' c ', 'd', nil, 6, false].each { |a| a.strip! if a.respond_to? :strip! }
=> ["c", "d", nil, 6, false]
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜