[英]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
中的內容。 兩者分別區分數組元素的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]);
。 在您的原始代碼中,使用for...of
循環時,可以簡單地用i
替換array[i]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.