set
,我尝试重构了一个标准的for循环for(var i = 0; i< 50; i++)
并且它起作用了,但是当我使用for in
循环进行重构时,它就不行了。我的猜测是在使用array.length
属性时出了问题。
TL;DR为什么这会返回一个由50个未定义元素组成的数组,而不是50个随机整数的数组?有没有办法使这种方法起作用?var set = [];
set.length = 50;
for(var i in set){
set[i] = Math.floor((Math.random() * 500) + 1);
}
console.log(set);
类似问题:有帮助,但不完全符合我的需求
更新
正如我所怀疑的那样,我错过的一点是设置set.length
并不会向数组添加元素,它只会创建一个稀疏数组(一个存在空缺的数组)。在我的情况下,你不能使用for in
,因为数组中没有任何可迭代的东西。我要么必须用虚拟内容(即空字符串)填充数组,要么更合理地将我尝试使用.length
属性实现的范围部分分离成单独的range
变量。
工作版本
var set = [], range = 50;
for(var i = 0; i < range; i++){
set[i]=Math.floor((Math.random() * 500) + 1);
}
console.log(set);