【发布时间】:2016-11-18 22:22:08
【问题描述】:
我似乎误解了“for..of”循环的功能。在下面的示例中,我找到了数组中最大的子数组(在本例中为 [2,-1,7])。当我使用“for..of”循环时,它返回“NaN”,但常规 for 循环“(var i = 0; i
“for..of”的迭代方式与常规 for 循环有何不同?
var array = [2,-1,7,-7];
var largestSubArray = function (array) {
var current = 0;
var newest = 0;
for(var i of array){
newest = Math.max(0, newest + array[i]);
current = Math.max(newest, current);
}
return current;
};
console.log(largestSubArray(array));
// Returns NaN, should return 8
【问题讨论】:
-
在
for..of中,i是值而不是键。尝试在控制台中记录i -
您应该检查 Array.reduce() 它是内置的,并且无需编写 for 循环即可执行您想要的操作。
-
感谢斯蒂芬和安德烈亚斯的建议。两者都阅读了文档,并在发布之前使用 reduce 实现了这一点,但不了解两个循环之间的区别。 Rob 的回答让它点击了。