如何从数组的字符串中删除一些特殊字符
How can remove some special character from string of array
def valid_sheet_names
Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?).map(&:downcase)
end
["hardware", "computer", "network", "mobile devices"]
此函数 return 一个 array.i 想要从字符串中删除 space、点和下划线。但我不知道该怎么做
与 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
在我们想要删除时更明确... delete
我会过滤数据库查询中的 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
获取任何类型的空白。
def valid_sheet_names
Company.find(@company_id).asset_types.pluck(:name).reject(&:nil?).map(&:downcase)
end
["hardware", "computer", "network", "mobile devices"]
此函数 return 一个 array.i 想要从字符串中删除 space、点和下划线。但我不知道该怎么做
与 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
在我们想要删除时更明确... delete
我会过滤数据库查询中的 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
获取任何类型的空白。