如何在它之外使用 for 循环值?

问题描述

我在函数内部使用了 forEach 循环,但我想对调用函数用户使用名为 seenelesadele 的值,我要他输入规则。 这可能吗?

这是代码...

**

let seen;
let sad;
let result;


 onlyIf = (test,then) => {if(test)  then()};

 function dalla(seen,sad,rule){

   seen.forEach(seenFunc);
   function seenFunc(seenele){

     sad.forEach(mainFunc);
     function mainFunc(sadele){

         onlyIf(seenele + sadele == 7,() => console.log(seenele,sadele))
     }
     
   }
 }


 dalla([1,2,4],[2,3,5,6])

**

解决方法

当然,只需将谓词作为参数传递即可:

function joinBy(a,b,rule) {
    let result = [];

    a.forEach(
        itemA => b.forEach(
            itemB => {
                if (rule(itemA,itemB))
                    result.push([itemA,itemB])
            }
        )
    );

    return result;
}


console.log(
    joinBy(
        [1,2,4],[2,3,5,6],(x,y) => x + y === 7
    )
)

进一步研究的更高级示例:

let pairs = (a,b) => a.flatMap(x => b.map(y => [x,y]));

let splat = f => x => f(...x);

let joinBy = (a,rule) => pairs(a,b).filter(splat(rule));