【问题标题】:how to use a for loop value outside of it?如何在它之外使用 for 循环值?
【发布时间】:2021-04-09 08:10:45
【问题描述】:

我在函数内部使用了 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])

**

【问题讨论】:

  • 不确定你的意思;无论如何,这是一个重构:jsfiddle.net/khswrm3e
  • 您好,欢迎来到 SO!你能告诉我们,代码的目的是什么?输入数据是什么,期望的结果是什么?
  • @Chris,谢谢,现在的代码看起来像代码了,干净多了
  • @helle ,嘿,谢谢!这部分代码 onlyIf(seenele + sadele == 7 我希望用户或我在调用函数时能够将规则放在那里,而不是在程序中硬编码跨度>

标签: javascript function foreach


【解决方案1】:

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

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, b, rule) => pairs(a, b).filter(splat(rule));

【讨论】:

  • 谢谢,@georg!我会尝试理解代码并自己编写作为练习
  • 这太容易理解了,这对我来说不正常哈哈,再次感谢你
  • @HamzaAmin:很高兴我能提供帮助,欢迎来到 Stack Overflow!
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2021-12-15
  • 2018-01-07
相关资源
最近更新 更多