在我的下面的代码中如果我没有在for循环中放入(var i = 0 ...),我得到了一个无限循环。
function steamrollArray(arr) {
var newArr = [];
for (i = 0; i < arr.length; i++) {
if (Array.isArray(arr[i])) {
newArr = newArr.concat(steamrollArray(arr[i]));
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
steamrollArray([1, [], [3, [[4]]]]);
任何人都可以解释原因吗?
答案 0 :(得分:1)
当你没有在函数内部使用print (L)
['60', '32', '32', '32', '32,33', '35', '34,35,36']
df1['a'] = df1['a'].astype(str)
d = df1.set_index('a')['b'].to_dict()
print (d)
{'32': 'A', '60': 'F', '33': 'B', '35': 'D', '34': 'C', '36': 'E'}
L = [[d[y] for y in x.split(',')] for x in L]
print (L)
[['F'], ['A'], ['A'], ['A'], ['A', 'B'], ['D'], ['C', 'D', 'E']]
关键字声明变量时,它将被视为全局变量。
我假设您的var
函数中还使用了steamrollArray
并且更改了值,因此它从函数返回时传递i
,现在它比{{1}更大循环永远不会结束。
总是在函数中使用arr.length
声明变量,这也是避免全局变量的一个很好的实践