Home > OS >  Exclude data from .map in Ruby
Exclude data from .map in Ruby

Time:11-16

I have this .map function that returns all the employers that are enabled.

 ::Employer.enabled.ordered.map do |e|

I need to filter out employers that == "some text"

I tried this but it isn't giving me the result I'm looking for:

::Employer.enabled.ordered.map do {|e| e.name == "some text" ? nil : [e] }.compact

I'm new to Ruby and not great at syntax, what am I missing?

CodePudding user response:

There is a select method available in ruby

a = [:foo, 'bar', 2, :bam]
a1 = a.select {|element| element.to_s.start_with?('b') }
a1 # => ["bar", :bam]

For your specific use case (Only keep items where e does not equal some text):

::Employer.enabled.ordered.select do {|e| e != "some text" }

Other options would be select!, reject! or reject. Each of them comes with a different behavior, but they are used in order to filter.

CodePudding user response:

Ruby has a nice Enumerable method for this scenario: reject.

::Employer.enabled.ordered.reject { |e| e.name == "unwanted-name" }
  • Related