JavaScript基础知识混乱/转换Python

时间:2018-01-05 17:55:51

标签: javascript python arrays

我尝试做的是将我的Python代码转换为JavaScript,但我无法弄清楚为什么它在JavaScript中的运行方式不同。我错过了什么?

该代码旨在获取具有1&0和0的值的数组,并返回一个数组,将这些值相加。

[1,1,0,1] => [2,1]

[0,0,1,1,1] => [3]

[0,0,0] => []

[1,1,0,0] => [2]

有效的Python代码(除非我非常错误)

def encode(arr):
    arr2=[]
    num = 0
    for i in arr:
        if i==1:
            num=num+1
        elif i==0 and num ==0:
            pass
        else:
            arr2.append(num)
            num=0
    if num>0:
        arr2.append(num)
    return arr2

不起作用的JavaScript

function  encode(arr) {
    var arr2=[];
    var num = 0;
    for (i in arr){
        if (i==1) {
            num++;
        } else if (i == 0 && num == 0) {
            // pass 
        } else {
            arr2.push(num);
            num=0;
        }
    }

    if (num>0) {
        arr2.push(num)   
    }

    return arr2;
}

1 个答案:

答案 0 :(得分:1)

而不是

for (i in arr) { ... }

你需要写

for (let i of arr) { ... }

这是因为for ... in迭代了可枚举属性,即数组索引。但是你想迭代数组值。

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in以及Why is using "for...in" with array iteration a bad idea?