如何从数组的字符串中删除一些特殊字符


def valid_sheet_names
Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?).map(&:downcase)
end
["hardware", "computer", "network", "mobile devices"]

函数返回一个数组。我想从字符串中去掉空格,点和下划线。但是我不知道该怎么做

我会在数据库查询中过滤nil值,并避免首先将它们加载到内存中。然后,我将使用一个tr调用对名称进行消毒:

def valid_sheet_names
Company.find(@company_id).asset_types.where.not(name: nil).pluck(:name)
names.map { |name| name.downcase.tr(' ._', '') }
end

基于@Sumak的@spickermann的答案

["hardware", "computer", "network", "mobile devices"].map do |asset_type|
asset_type.gsub(/[._s]/, '')
end

可以像这样插入到你的代码中

def valid_sheet_names
Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?).map { |name| name.downcase.gsub(/[._s]/, '') }
end

这里首选gsub,以利用元字符s,它可以捕获任何类型的空格。

与在集合上使用map的方式相同,您可以使用块来迭代它:

["hardware", "computer", "network", "mobile devices"].map do |asset_type|
asset_type.delete(' ')
.delete('_')
.delete('.')
end

你的函数可以像这样:

def valid_sheet_names
asset_types = Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?)
# I'd personally extract normalization to a specific function or module
asset_types.map do |asset_type|
asset_type.downcase
.delete(' ')
.delete('.')
.delete('_')
end
end

您也可以使用gsub(它支持正则表达式)。虽然我发现delete更明确,当我们想…删除

最新更新