【问题标题】:Can I curry this better?我可以咖喱这个更好吗?
【发布时间】:2014-11-19 09:49:16
【问题描述】:

我使用ramda 制作了这个 sn-p 来检查数组 A 的任何值是否存在于数组 B 中,假设它们是平面数组。

var hasAtLeastOneTruthValue = ramda.contains(true);
var alpha = [1,2,3]
var beta = [4,1,7];

var valueOfArrayInArray = ramda.map(function(a_v){
    return ramda.contains(a_v, beta);
});

console.log(hasAtLeastOneTruthValue(valueOfArrayInArray(alpha)));

我不喜欢的是 硬编码 betavalueOfArrayInArray 中。它可以以不同的方式完成吗?请注意,我并不是在寻找具有相同效果的完全不同的实现,而只是为了更好地理解这种情况下的柯里化。

【问题讨论】:

    标签: javascript functional-programming currying ramda.js


    【解决方案1】:

    您可以从右侧部分应用contains

    var valueOfArrayInArray = R.map(R.rPartial(R.contains, beta))
    

    或者翻转它:

    var valueOfArrayInArray = R.map(R.flip(R.contains)(beta))
    

    【讨论】:

      【解决方案2】:

      使用绑定:

      var hasAtLeastOneTruthValue = ramda.contains(true);
      
      var alpha = [1,2,3]
      var beta = [4,1,7];
      
      function finder(lookup,a_v){
          return ramda.contains(a_v, lookup);
      }
      
      var valueOfArrayInArray = ramda.map(finder.bind(null,beta));
      
      console.log(hasAtLeastOneTruthValue(valueOfArrayInArray(alpha)));
      

      【讨论】:

      • 感谢您的回答!这是一个可行的解决方案,但 @elclanrs 的解决方案更“实用”,这是我想要熟练掌握的,所以我接受了他的解决方案。
      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多