创建一个数组数组,其中每个数组有 10 个随机数
Posted
技术标签:
【中文标题】创建一个数组数组,其中每个数组有 10 个随机数【英文标题】:Create an array of arrays, in which every array has 10 random numbers 【发布时间】:2020-04-24 09:24:15 【问题描述】:在这里我尝试了解如何创建数组数组:我创建了一个数组,但是如何创建一个数组数组,其中每个数组都有 10 个随机数?
var arrRand = [];
while(arrRand.length < 10)
var random = Math.floor(Math.random() * 10) + 1;
if(arrRand.indexOf(random) === -1) arrRand.push(random);
console.log(arrRand);
【问题讨论】:
在 *** 上已经有很多此类问题的答案,将其分解为 2 个问题并在谷歌上搜索 best way to generate empty 2D array Creating array of length n with random numbers @Leonardo 如果不使用相同的数字填充数组,您的解决方案会很棒。 @NiklasE。好点子 ????;顺便说一句,看看人们如何将这个不准确的评论复制粘贴到答案中 【参考方案1】:一种函数式方法,每个数字都是随机的。
let x = Array(4).fill().map(
() => Array(10).fill().map(
() => Math.floor(Math.random() * 10)
)
);
console.log(x);
【讨论】:
是的,这行得通;顺便说一下,外部 .map() 可以安全地省略;我在浏览器控制台中测试过 @Leonardo Elaborate。在我看来,外层 map 功能是必须的,不能省略。否则它将是同一个数组四次。 是的,两张地图都是必要的; +1【参考方案2】:您可以使用Math.random
和嵌套的for loop
。这是一个例子:
let arr = [];
for(let i = 0; i < 4; i++)
let current = [];
for(let j = 0; j < 10; j++)
current.push(Math.floor(Math.random() * 10));
arr.push(current);
console.log(arr)
【讨论】:
【参考方案3】:为了保持代码简洁干爽,可以在 ES6 语法中使用 map 函数。
const x = [...Array(6)].map(
() => [...Array(10)].map(
() => Math.floor(Math.random() * 10) + 1
)
)
console.log(x)
【讨论】:
有趣的是您如何使用[...Array(10)]
而不是 Array(10).fill()
使它们可映射,但这实际上并没有更好:它只保存 2 个字符并且效率较低,因为解释器会初始化两个数组,遍历内部以生成外部。我会坚持我的答案。
[...Array(6)]
是Array(6)
的无用冗余版本
@NiklasE。是的;正确的;它不是。顺便说一句,我看到人们在任何地方都盲目地过度使用备用语法;顺便说一句,不在这里;这是合法的。但我更喜欢 Array.fill()
通过使用扩展语法,代码更加一致和清晰,因为我们可以很容易地注意到[...Array(6)]
,因为它是map函数中的一个数组。代码性能没什么大不了,但它带来了干净的代码和直观的感觉。【参考方案4】:
let a = Array(4).fill(Array(10).fill(null))
然后在循环中填充Math.random()
【讨论】:
只有一半的答案。如果缺少的部分可以与第一部分一起完成,则没有必要。以上是关于创建一个数组数组,其中每个数组有 10 个随机数的主要内容,如果未能解决你的问题,请参考以下文章
具有 10 个元素的随机布尔数组,其中 10 个元素中有 3 个为真 [重复]
如何在给定范围内创建一个随机打乱数字的 int 数组 [重复]