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

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 获取任何类型的空白。