最长正整数的子数组。编译器没有意义

时间:2019-09-13 09:53:31

标签: javascript

我正在检查数组的每个数字,如果该数字为正数且大于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。 谁能告诉我怎么了?预先感谢

1 个答案:

答案 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。