查找哈希数组中的第一个值



我有以下数组。

[
  {"title"=>"un", "link"=>nil, "description"=>""},
  {"title"=>"deux", "link"=>"https://apple.com", "description"=>"Products"},
  {"title"=>"three", "link"=>"http://www.amazon.com", "description"=>"Welcome"},
  {"title"=>"four", "link"=>"https://apple.com", "description"=>"iPad"},
]

我想删除链接为nil或为空的哈希,返回一个要获取的链接数组:

["https://apple.com", "http://amazon"]

不知道如何删除散列并只获取唯一链接。

删除空("")和nil值:

arr.map { |a| a["link"] }.reject(&:blank?).uniq

正如@Arup所指出的,blank在Rails中,纯Ruby解决方案是:

arr.map { |a| a["link"] }.reject{|e| e == "" || e == nil}.uniq

请像下面的代码一样尝试

arr.map {|o| o['link'] }.reject { |e| e.to_s.empty? }.uniq

解决方案:

a = [
{"title"=>"un", "link"=>nil, "description"=>""},
{"title"=>"deux", "link"=>"https://apple.com", "description"=>"Products"},
{"title"=>"three", "link"=>"http://www.amazon.com", "description"=>"Welcome"},
{"title"=>"four", "link"=>"https://apple.com", "description"=>"iPad"},
]
a.map{|data| data["link"] }.reject(&:blank?).uniq

解释

a是散列的数组

Map将遍历数组中的每个散列,并创建一个仅具有"链接"值的新数组。如果原始哈希没有链接键,它将在新数组中创建一个nil值。

Example result after map: 
[nil, "https://apple.com", "https://www.amazon.com", "https://apple.com"]

拒绝然后调用轨道主动支持方法空白?在数组中的每个项目上,如果为空?return true返回一个没有值的新数组:

[nil.blank?, "https://apple.com".blank?, "https://www.amazon.com".blank?, "https://apple.com".blank?]
Result:    
["https://apple.com", "https://www.amazon.com", "https://apple.com"]

然后Uniq生成一个没有重复的数组(另一种选择是使用ruby集)

["https://apple.com", "https://www.amazon.com"]

您可以通过:

 arr.map {|o| o['link'] }.compact.uniq

compact移除所有nil,并且uniq返回唯一值。

您可以使用Enumerable#each_with_object:

array.each_with_object([]) do |h, a|
  a << h['link'] unless h['link'].nil? || h['link'].empty?
end.uniq
# => ["https://apple.com", "http://www.amazon.com"]

最新更新