javascript - 如何在 for 循环中使用不同的值执行 Math.random()?
问题描述
我尝试s
用 9999 组不同的值填充数组m[i][random]
,代码如下:
let m = [[22,0],[53,0],[64,0],[45,0],[34,0]];
let l = m.length;
let s = [];
for (let j = 0; j < 9999; j++)
{
for(let i = 0; i < m.length; i++)
{
let x = Math.floor(Math.random()*l);
m[i][1] = x;
}
s.push(m);
}
但我得到相同的值:
console.log(s)
[ [ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ],
[ [ 22, 0 ], [ 53, 2 ], [ 64, 0 ], [ 45, 4 ], [ 34, 1 ] ], ...]
我究竟做错了什么?如何解决?
解决方案
在循环内部创建m
子数组(因此每次迭代都有一个单独的子数组),而不是在循环之外 - 在外部,您只在内存中创建了每个索引指向的单个数组。
let s = [];
for (let j = 0; j < 9999; j++)
{
let m = [[22,0],[53,0],[64,0],[45,0],[34,0]];
let l = m.length;
for(let i = 0; i < m.length; i++)
{
let x = Math.floor(Math.random()*l);
m[i][1] = x;
}
s.push(m);
}
或者,更多功能性和一次性使用Array.from
:
const s = Array.from(
{ length: 2 },
() => [[22,0],[53,0],[64,0],[45,0],[34,0]]
.map(([num]) => [num, Math.floor(Math.random() * 5)])
);
console.log(s);
推荐阅读
- javascript - 将对象集合转换为 CSV,其中键作为标题和值
- c++ - Qt - 在QGraphicScene中拖放时如何从项目中获取文本?
- asp.net - QRS API 调用返回“无法识别客户端证书凭据”
- docusignapi - DocuSign API 集成器和私钥,具有多个用户
- azure - 用于检查声明 Azure 功能的挂钩?
- matlab - 在matlab中将元素附加到单元格
- ruby-on-rails - Rails Postgres db:迁移未提供密码
- php - 使用 PHP / Laravel 5.5 的占位符在文件系统上创建文件
- c# - 如何告诉方法在调用时使用特定的常量?
- r - 如何使用 walk 以 purrr 静默绘制 ggplot2 输出