I have the following array:
array = [{"email"=>"test@test.com", "name"=>"Test"},
{"email"=>"testA@test.com", "name"=>"Test A"},
{"name"=>"Test B", "email"=>"testB@test.com"},
{"email"=>"testC@test.com", "name"=>"Test C"},
{"name"=>"Test D", "email"=>"testD@test.com"},
{"email"=>"testE@test.com"},
{"name"=>"Test F", "email"=>"testF@test.com"}]
I have a list of "blacklist" emails, for instance:
blacklist = ["testC@test.com"]
I want to do something like this:
array - blacklist
# => should remove element {"email"=>"testC@test.com", "name"=>"Test C"}
Surely there is a sexy-Ruby way to do this with .select or something, but I haven't been able to figure it out. I tried this to no avail:
array.select {|k,v| v != "testC@test.com"} # => returns array without any changes
I think you're looking for this:
filtered_array = array.reject { |h| blacklist.include? h['email'] }
or if you want to use select
instead of reject
(perhaps you don't want to hurt anyone's feelings):
filtered_array = array.select { |h| !blacklist.include? h['email'] }
Your
array.select {|k,v| ...
attempt won't work because array hands the Enumerable blocks a single element and that element will be a Hash in this case, the |k,v|
trick would work if array
had two element arrays as elements though.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With