Ruby中使用.map方法时如何排除名称匹配指定文本的雇主数据
你的代码存在3个核心问题
- 语法冲突:Ruby 块有两种合法写法,要么用
do ... end包裹,要么用{ ... }包裹,你同时写了do和{属于语法错误,代码根本无法正常执行。 - 逻辑冗余:
map是集合转换方法,你的需求是过滤元素,应该直接使用专门的过滤方法reject或者select,不需要用map+nil+compact这套冗余逻辑。 - 返回值不符合预期:你在三元表达式里返回的是
[e](单元素数组),即使语法修正后运行,compact得到的结果会是嵌套数组[[雇主1], [雇主2]],不是你要的雇主对象集合。
正确写法
最简洁的实现方式,直接用 reject 排除名称匹配的记录:
::Employer.enabled.ordered.reject { |e| e.name == "some text" }
如果你习惯用正向筛选,也可以用 select 写:
::Employer.enabled.ordered.select { |e| e.name != "some text" }
如果一定要用你原来的 map 思路修正(不推荐,仅作语法参考):
::Employer.enabled.ordered.map { |e| e.name == "some text" ? nil : e }.compact
内容的提问来源于stack exchange,提问作者GVashist
相关产品推荐
相关产品推荐

