【问题标题】:Can you implement a while loop inside a Curried arrow function expression?你能在 Curried 箭头函数表达式中实现一个 while 循环吗?
【发布时间】:2017-05-24 17:25:00
【问题描述】:

你能在柯里化箭头函数表达式中实现一个while循环吗? 我希望能够将 while 循环表达为表达式。

var arr = [1,2,3,4,5,6];

var len = arr.length;

const iter = i => while(() => (console.log(i), ()=>i--);

 iter(len);

【问题讨论】:

  • 请不要阻止
  • @PeterMader 简洁
  • 为了最大程度的难以辨认,还有其他原因。
  • while(() => (console.log(i), ()=>i--) 是什么意思?
  • 用递归替换 while 怎么样:const iter = i => (console.log(i), i && iter(i-1)); - 虽然仍然难以辨认。

标签: javascript while-loop ecmascript-6


【解决方案1】:

不。没有块的箭头函数必须是表达式,而循环不是(它们是语句)。你可以这样做

function whileExp(check,callback){
 while(typeof check=="function"?check():check){
   if(callback) callback();
 }
}

(counter=>whileExp(()=>--counter,()=>alert(counter)))(10);

但我不知道为什么这应该有用

【讨论】:

    【解决方案2】:

    您缺少数组声明的名称,我不知道 while 循环的这种语法,但下面的这种语法可以正常工作

    var arr = [1,2,3,4,5,6];
    
    var len = arr.length;
    
    const iter = i => {while(i > 0){console.log(i); i--;}};
    
     iter(len);

    【讨论】:

    • 你能做到不加块吗
    • 一行行,我觉得可以
    【解决方案3】:

    可以使用Array.prototype.reduceRight(),逗号运算符

    const arr = [1,2,3,4,5,6];
    
    const iter = (a, b) => (console.log(a), b);
    
    arr.reduceRight(iter);

    【讨论】:

    • “控制数组的迭代次数”是什么意思? Question 处的代码仅调用console.log()。预期的结果是什么?
    • @Arrow “我只想遍历数组的一半。我不想在此之外进行迭代。” 原始问题中没有描述该要求。见stackoverflow.com/help/how-to-ask
    • @Arrow 建议在问题本身的文本中具体明确要求是什么,而不是试图在 cmets 中将新要求按摩到问题中。目前要求不明确。使用break 停止forwhile 循环的迭代。
    • @Arrow 这不是“想要”一种或另一种方式的问题。相反,努力改进问题的具体要求是什么。目前的答案是对原始问题要求的解释。您为什么现在考虑删除问题?
    • 我改了问题。让我知道质量是否有所提高,或者是否有您认为我没有解决的问题。我想删除该问题,因为该问题有负面影响。我有我的答案,这个问题不值得丢分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多