Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby: remove empty braces in array of hashes

The content I'm scraping includes some blank elements. I either need to stop variables being set if there is no data (preferable) or just do some surgery afterwards and completely delete hashes containing blanks.

Here's my scrape code:

eqs = []

nokogiri_page.xpath('//table/tr').each do |row|
  date = row.xpath('td[1]/a/text()').text.strip
  location = row.xpath('td[5]/text()').text.strip

  eqs.push(
    date: date,
    location: location
  )
end

Some of these are blank, and I can't know which beforehand. So I tried iterating over the array and deleting blank values with:

eqs.each do |event|
  event.reject! {|k, v| v.empty? || v=="  " || v=="" }
end

This successfully removes blank keys and values, but I am still left with the empty curly braces...

Output:

[
 {},
 {},
 {},
 {
    :date=>"2016-12-14 13:19:55",
    :location=>"Myanmar"
 },
 {
    :date=>"2016-12-13 17:57:04",
    :location=>"Northern Sumatra, Indonesia"
 }
]

I want to get rid of the empty hashes completely! Anyone know what I'm getting wrong here?

like image 284
matski Avatar asked Dec 16 '16 02:12

matski


1 Answers

you can use Array#delete_if

arr = [{}, {}]
arr.delete_if &:empty?
# i.e. arr.delete_if { |hash| hash.empty? }
arr.empty?
# => true
like image 196
max pleaner Avatar answered Oct 19 '22 18:10

max pleaner