2016-12-16 5 views
4

Der Inhalt, den ich scrapping enthält einige leere Elemente. Ich muss entweder einstellen, dass Variablen gesetzt werden, wenn es keine Daten gibt (vorzuziehen), oder einfach nur eine Operation durchführen und Hashes mit Leerzeichen komplett löschen.Ruby: Entfernen Sie leere Klammern in Array von Hashes

Hier ist mein schaben 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 

Einige davon sind leer, und ich kann, die vorher nicht wissen. Also habe ich versucht, über das Array iterieren und Blindwerte löschen mit:

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

Diese erfolgreich entfernt leere Schlüssel und Werte, aber ich bin immer noch mit den leeren geschweiften Klammern links ...

Ausgang:

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

Ich möchte die leeren Hashes komplett loswerden! Wer weiß, was ich hier falsch mache?

+0

Wenn Sie das Array laufen und laufen die gleiche ablehnen (&: leer) Es sollte den Trick –

+0

Sie bereits wissen, wie man 'ablehnen', so '! lehne die Elemente ab, die du nicht vom Top-Level-Array willst. – meagar

+0

'eqs.reject (&: leer?) .jeweils ...' –

Antwort

4

können Sie Array # verwenden delete_if

arr = [{}, {}] 
arr.delete_if &:empty? 
# i.e. arr.delete_if { |hash| hash.empty? } 
arr.empty? 
# => true 
Verwandte Themen