我正在检查数组的每个数字,如果该数字为正数且大于0,则变量调用“长度”将增加。如果不是,则将'length'变量设置为0。 但是对于数组元素2和7,它总是进入else模式,并将我的'length'变量设置为0。 但显然2和7大于0。
我已经尝试了3种不同的编译器以及chrome开发人员控制台。我不明白怎么了。
function longestSequence(arr) {
let longest = 0;
let length = 0;
for(let i of arr) {
if(arr[i] > 0) {
length = length + 1;
console.log("for "+i+" length "+length);
}
else {
length = 0;
console.log("for "+i+" length "+length);
}
if(length > longest) {
longest = length;
}
}
return longest;
}
const ara = [3, 2, -4, 7, 1, 5, 6];
console.log(longestSequence(ara));
输出:
'for 3 length 1'
'for 2 length 0'
'for -4 length 0'
'for 7 length 0'
'for 1 length 1'
'for 5 length 2'
'for 6 length 3'
3
,但显然“ for 2 length 0”应为“ for 2 length 2”,而“ for 7 length 0”应为“ for 7 length 1” 该函数的值应为4。 谁能告诉我怎么了?预先感谢
答案 0 :(得分:4)
i
不是索引,而是数组元素本身,for..of
循环遍历可迭代的每个元素:
function longestSequence(arr) {
let longest = 0;
let length = 0;
for(let i of arr) {
if(i > 0) {
length = length + 1;
console.log("for "+i+" length "+length);
}
else {
length = 0;
console.log("for "+i+" length "+length);
}
if(length > longest) {
longest = length;
}
}
return longest;
}
const ara = [3, 2, -4, 7, 1, 5, 6];
console.log(longestSequence(ara));
从MDN docs:
(可重复变量){语句}
变量
在每次迭代中,不同属性的值是 分配给变量。变量可以用const,let或 var。