Javascript“for..of”未按预期工作。

时间:2016-07-15 16:07:19

标签: javascript ecmascript-6

我似乎误解了“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

3 个答案:

答案 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...offor...in混为一谈。两者之间的差异是在迭代期间存储在i中的内容。两者都区分了数组元素的valueindex

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