创建一个数组数组,其中每个数组有 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 个为真 [重复]

如何创建一个包含“n”个随机整数的数组?

如何在给定范围内创建一个随机打乱数字的 int 数组 [重复]

java怎么随读取一列数组里某个值?比如[1,2,3,4]随机读取其中的一个数。这是怎么实现是呢?

用随机数创建一个数组

产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。