Javascript 传递anon函数时未定义Error属性(如何转换)?

Javascript 传递anon函数时未定义Error属性(如何转换)?,javascript,functional-programming,ecmascript-6,currying,Javascript,Functional Programming,Ecmascript 6,Currying,我认为这种技巧叫做咖喱 问题: 问题: 如何使用hasType,以便最终将未命名的anon函数替换为approvals.find(hasType) hasType引用的“type”变量在其作用域中不存在。您需要内联该函数以获取类型(或将其封装在闭包中,但这几乎是一样的) p.S.-不相关,但在ES6中,“{type:type}”可以缩短为“{type}”您可以使用.bind()。您可以将类型(额外参数)传递给回调 var批准=[ {type:'media'}, {type:'scope'},

我认为这种技巧叫做咖喱

问题:

问题: 如何使用
hasType
,以便最终将未命名的anon函数替换为
approvals.find(hasType)

hasType引用的“type”变量在其作用域中不存在。您需要内联该函数以获取类型(或将其封装在闭包中,但这几乎是一样的)


p.S.-不相关,但在ES6中,“{type:type}”可以缩短为“{type}”

您可以使用
.bind()
。您可以将
类型
(额外参数)传递给回调

var批准=[
{type:'media'},
{type:'scope'},
]
变量allApprovalTypes=[
"媒体",,
“范围”,
"金融",,
“合规性”,
];
变量hasType=(el,type)=>{
返回el.type==类型;
}
console.log(allApprovalTypes.map)((类型)=>{
returnapprovals.find(hasType.bind(null,type))| |{type:type}//这很有效。
}));
//没有约束力();
console.log(allApprovalTypes.map)((类型)=>{
returnapprovals.find((el)=>returnhastype(el,type))| |{type:type}//这很有效。

}));
您的
hasType
函数如何知道
type
变量?如何将其封装在闭包中以使hasType工作?这就是我试图实现的目标。我只是有点不懂语法。将hasType更改为接受“type”的函数,但返回hasType函数的原始版本。然后,在.find(…)中传递hasType(type):var hasType=(type)=>{return(el)=>{return el.type==type;};};}。。。allApprovalTypes.map(type=>{return approvals.find(hasType(type))|{type};});是的,这就是我要找的。这种技巧叫做“咖喱”,对我来说“咖喱”是一个新名词,但读过之后,我会说“是”,这个特殊的例子可以被认为是咖喱。下面的答案是“用结尾包装”。关于如何使用bind实现此w/o的任何想法?无绑定意味着在
匿名函数中调用
hasType()
(胖箭头函数)。我更新了这个,我正在寻找var hasType=(type)=>(el)=>el.type==type;
ReferenceError: type is not defined
    at hasType:14:27
    at allApprovalTypes.map:18:26
    at eval:17:21
    at eval
   var approvals = [
      {type: 'media'},
      {type: 'scope'},
    ]

    var allApprovalTypes = [
      'media',
      'scope',
      'finance',
      'compliance',
    ];

   var hasType = (el) => {
       return el.type === type;
   }

   allApprovalTypes.map((type) => {
        return approvals.find((el)=> el.type === type) || {type: type} // this works.
   });

   allApprovalTypes.map((type) => {
      return approvals.find(hasType) || {type: type} // this wont work.        
   });
allApprovalTypes.map((type) => {
  return approvals.find((el) => {
       return el.type === type;
   }) || {type: type}
});


   // closure
   var hasType = (type) => (el) => {
       return el.type === type;
   }