【发布时间】:2015-07-31 15:21:18
【问题描述】:
要返回一个数组 set,其中包含 1 到 500 之间的随机数序列,我尝试重构循环 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,因为没有任何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);
【问题讨论】:
-
你不能那样增加数组的大小。
标签: javascript arrays for-in-loop