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?
Wenn Sie das Array laufen und laufen die gleiche ablehnen (&: leer) Es sollte den Trick –
Sie bereits wissen, wie man 'ablehnen', so '! lehne die Elemente ab, die du nicht vom Top-Level-Array willst. – meagar
'eqs.reject (&: leer?) .jeweils ...' –