jea*_*_re 4 javascript arrays for-in-loop
要返回set一个序列为1到500之间的随机数的数组,我尝试重构一个标准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);
Run Code Online (Sandbox Code Playgroud)
类似的问题:有帮助,但不是我想要的
我怀疑我遗漏的一点是设置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);
Run Code Online (Sandbox Code Playgroud)
它返回未定义,因为您正在使用 设置数组长度set.length。当调用此函数时,数组的所有元素都会被undefined
我会set.length完全删除该行。
更新了代码
var set = [];
for (i = 0; i <= 50; i++) {
set.push(Math.floor(Math.random() * 500))
}
console.log(set)
=> [138, 215, 149, 180, 348, 497, 88, 156, 238, 439, 130, 185, 20, 116, 330, 131, 188, 257,
260, 1, 469, 482, 208, 494, 26, 374, 281, 403, 403, 137, 156, 243, 378, 281, 329,
84, 471, 429, 120, 381, 456, 471, 36, 395, 299, 497, 151, 210, 80, 310]
Run Code Online (Sandbox Code Playgroud)
听起来我想要创建一个带有动态内容的静态大小的数组.如果是这种情况,则需要先创建具有适当大小的数组.这将为您创建阵列.但是,您可以使用您想要的随机值自动填充数组:
var N = 50;
var set = Array.apply(null, {length: N}).map(Function.call, Math.random);
Run Code Online (Sandbox Code Playgroud)
一旦数组被自动填充,其余的代码应该按预期工作,只需使用数组中随机数的值,这样:
for(var i in set){
set[i] = Math.floor(set[i] * 500) + 1;
}
console.log(set);
// OUTPUT
// [267, 219, 293, 298, 403, 70, 162, 270, 434, 292, 433, 478, 476,
// 311, 268, 266, 105, 242, 255, 250, 206, 104, 142, 406, 50, 139,
// 364, 375, 47, 480, 445, 149, 91, 228, 404, 267, 298, 158, 305,
// 311, 92, 377, 490, 65, 149, 431, 28, 452, 353, 494]
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:创建一个包含1 ... N的JavaScript数组
第二个链接似乎有你的答案。
它for (var item in array)会查看您的数组,并且对于数组中的每个项目,将该项目存储在“item”中,并允许您迭代每个项目。设置 array.length 不会为您提供数组中的任何项目,因此for in根本不会执行 - 没有什么可以迭代的。
| 归档时间: |
|
| 查看次数: |
18318 次 |
| 最近记录: |