我尝试做的是将我的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;
}
答案 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?