簡體   English   中英

Javascript“ for..of”無法正常工作。

[英]Javascript “for..of” not working as expected.

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

i不是當前索引,而是當前值。 嘗試以下方法:

for(var i of array){
    newest = Math.max(0, newest + i);
    current = Math.max(newest, current);
}

更改

newest = Math.max(0, newest + array[i]);

newest = Math.max(0, newest + i);

我認為您正在for...of for...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]); 在您的原始代碼中,使用for...of循環時,可以簡單地用i替換array[i]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM