我似乎误解了“for..of”循环的功能。在下面的例子中,我在数组中找到最大的子数组(在本例中为[2,-1,7])。当我使用“for..of”循环时,它返回“NaN”,但是两个常规for循环“(var i = 0; i< array.length; i ++)”和“for..in”返回预期结果为8.
“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
答案 0 :(得分:3)
var h= $(window).height() - $("#topbar").height() - 15;
var w = $(window).width()/2 -10 ;
$(".panel").css( "height", h );
$(".panel").css( "width", w );
不是当前索引,它是当前值。试试这个:
i
答案 1 :(得分:1)
更改
newest = Math.max(0, newest + array[i]);
到
newest = Math.max(0, newest + i);
答案 2 :(得分:0)
我认为您将for...of
与for...in
混为一谈。两者之间的差异是在迭代期间存储在i
中的内容。两者都区分了数组元素的value
和index
。
for...of
将您的i
设置为迭代周期中当前元素的value
for...in
将您的i
设置为迭代周期中当前元素的value
将来测试此问题的一种简单方法是console.log
您的变量。一个简单的测试通过稍微修改代码来说明上述行为:
var array = [2,-1,7,-7];
var largestSubArray = function (array) {
var current = 0;
var newest = 0;
for(var i of array){
console.log(i, array[i]);
newest = Math.max(0, newest + array[i]);
current = Math.max(newest, current);
}
return current;
};
console.log(largestSubArray(array));
在上面,结果如下:
i array[i]
================
2 7
-1 undefined
7 undefined
-7 undefined
NaN
这是因为i
等于上面代码的value
。但是,将其从for...of
更改为for...in
会产生以下结果:
i array[i]
================
0 2
1 -1
2 7
3 -7
8
注意您的行newest = Math.max(0, newest + array[i]);
。在原始代码中,使用array[i]
循环时,i
可以简单地替换为for...of
。