如何在谓词数组上映射单个值
how to map a single value over an array of predicates?
如果我有一个谓词函数数组,
rules = [is_cute, has_good_job, is_not_crazy, is_tall_enough ]
将它们全部应用于同一个变量的最佳实践是什么?
我得到的结果是
candidate= "joe pesci"
_.map(rules, function(rule){return rule.apply(candidate)} )
很明显,我们的目的是把它用在像
这样的东西上it_is_true_love = _.all( rules.map(...))
这是一件好事吗?我错过什么了吗?在函数式编程中还有其他的方法吗?
如果目的是检查是否所有或某些为真,则可以使用:
rules.every(function(rule){return rule.apply(candidate)})
rules.some(function(rule){return rule.apply(candidate)})
我不确定你在用哪一种Algol语言写作。看起来像JavaScript,所以我猜你需要使用return
在你的例子,它的工作
与大多数"for-like"问题一样,您可以将map与lambda一起使用。
用Elixir语言编写的示例(注意这里的点是一个函数应用程序):
bigger_than = fn x,y -> x>y end
bigger_1 = fn x -> bigger_than.(x,1) end
bigger_5 = fn x -> bigger_than.(x,5) end
bigger_10 = fn x -> bigger_than.(x,10) end
# list of predicates
l = [bigger_1,bigger_5,bigger_10]
# results in an interactive session:
iex(7)> x=1
iex(8)> Enum.map(l,fn f -> f.(x) end)
[false, false, false]
iex(9)> Enum.map(l,fn f -> f.(1) end)
[false, false, false]
iex(10)> Enum.map(l,fn f -> f.(3) end)
[true, false, false]
iex(11)> Enum.map(l,fn f -> f.(7) end)
[true, true, false]
iex(12)> Enum.map(l,fn f -> f.(11) end)
[true, true, true]
目前为止我发现的最优雅的解决方案是Rambda.js:
var rules = [is_cute, has_good_job, is_not_crazy, is_tall_enough ]
var is_true_love = R.allPass(rules);
使用例子:
// is_true_love('joe pesci') => false //not that cute anymore
// is_true_love('elon musk') => false //he's probably crazy!
// is_true_love( the_real_one ) => true
相关文章:
- 如何匹配多个值使用正则表达式返回单个值
- 如何从$_COOKIE中提取单个值[“elementValues”]
- 尝试从csv文件中检索单个值时出现问题
- Highcharts-在单个值上显示标记图标
- 如何从MYSQL中获取单个值并将其保存到JavaScript变量中
- 如何根据JavaScript Node.js中的单个值动态拆分数组
- 从 HTML 页面中的第三方响应数据中获取单个值
- 数组循环以获取单个值
- 当任何列被称为“树映射”时,是否可以创建树映射;值”;
- 从流星服务器到客户端获取单个值
- GWT:setInnerHTML取消映射属性值
- 从字符串和计数中提取单个值
- Bootstrap 模态填充了相同的单个值 - Meteor+React
- 如何通过 AJAX 传递表单值和单个值
- 使用 JAVASCRIPT 将单个值复制到多个列中
- 当输入为单个值时,JSON.stringify() 结果
- 使用 Javascript 从 JSON 文件向 HTML 返回单个值
- Javascript 更新关联数组中的单个值
- 如何从数组中提取单个值
- 如何在谓词数组上映射单个值