这种 for 循环迭代的替代方法是如何工作的? (Javascript)[重复]

Posted

技术标签:

【中文标题】这种 for 循环迭代的替代方法是如何工作的? (Javascript)[重复]【英文标题】:How does this alternative to a for loop iteration work? (Javascript) [duplicate] 【发布时间】:2018-01-16 08:13:56 【问题描述】:

有人可以向我解释一下这段代码是如何工作的,或者有一个链接可以解释这个吗? (具体部分:+acc + +curr;)

有问题的代码:

let args = process.argv;
let sum = args.reduce(function(acc, curr) 
  return +acc + +curr;
);
console.log(sum);

具有相同功能的 for 循环的原始解决方案:

let result = 0;
for (i = 0; i < process.argv.length; i++) 
  result += Number(process.argv[i])

console.log(result);

上面的花哨代码是了解/推荐做法的好方法吗? 谢谢。

【问题讨论】:

javascript: plus symbol before variable reduce、map 和 filter 都是不做 for 循环的迭代方式,它们非常强大但很难理解。你试过谷歌搜索吗?这不是格式最好的问题,你不是在问什么让你感到困惑,只是问什么是减少。可以用谷歌搜索。 不,省略起始值不是一个好习惯。更好:const sum = process.argv.reduce((acc, arg) =&gt; acc + Number(arg), 0); 【参考方案1】:

let args = process.argv let sum = args.reduce(function(acc, curr) return +acc + +curr;

console.log(sum)

减少文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

一元运算符文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus

就最佳实践而言,我不认为这是非常易读的。而且它在 JS 中不是一个常见的习语。由于类型强制,你很少需要这个。话虽如此,我不认为这是不好的做法。

【讨论】:

以上是关于这种 for 循环迭代的替代方法是如何工作的? (Javascript)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python-迭代器协议和for循环工作机制

Python全栈day18(迭代器协议和for循环工作机制)

迭代器协议和for循环工作机制

迭代器和for循环工作机制

《Python学习之路 -- Python基础之迭代器及for循环工作原理》

迭代器协议和for循环工作机制