Javascript 成语;重复n次;?

Javascript 成语;重复n次;?,javascript,Javascript,以下是一种在JS中生成由3个随机数组成的数组的既浪费又不切实际的方法: [1, 1, 1].map(Math.random) // Outputs: [0.63244645928, 0.59692098067, 0.73627558014] 使用虚拟数组(例如,[1,1,1])仅仅是为了在其上调用map,对于足够大的n来说,既浪费(内存)又不切实际 一个人想要什么,就像一个假设: repeat(3, Math.random) // Outputs: [0.214259553965, 0.002

以下是一种在JS中生成由3个随机数组成的数组的既浪费又不切实际的方法:

[1, 1, 1].map(Math.random) // Outputs: [0.63244645928, 0.59692098067, 0.73627558014]
使用虚拟数组(例如,
[1,1,1]
)仅仅是为了在其上调用
map
,对于足够大的n来说,既浪费(内存)又不切实际

一个人想要什么,就像一个假设:

repeat(3, Math.random) // Outputs: [0.214259553965, 0.002260502324, 0.452618881464]
使用vanilla JavaScript我们能做的最接近的事情是什么

我知道像下划线这样的库,但我在这里尽量避免使用库

我查看了的答案,但它不适用于一般情况。例如:

Array(3).map(Math.random) // Outputs: [undefined, undefined, undefined]
Array(4).join(Math.random()) // Outputs a concatenation of a repeated number
Array(3).fill(Math.random()) // Fills with the same number
其他几个答案建议修改内置类;一个我认为完全不可接受的实践。

不足之处。JS有一个功能,它正好符合您的需要:

_.times(3, Math.random)
如果不想使用下划线,可以编写自己的
times
函数(从下划线源复制并稍微简化):

times=函数(n,迭代器){
var accum=数组(数学最大值(0,n));
对于(var i=0;i
最短优雅ES6:

let times=(n,f)=>{while(n-->0)f();}
哦,这不是用来创建数组的,但它仍然很整洁

times(3,()=>print('wow'))
或红宝石风格:

Object.assign(Number.prototype,{times(f){x=this;while(x-->0)f();}})
3..times(()=>print('wow'))

也许
数组。from
回调可以使用:

var result=Array.from(Array(3),Math.random);
控制台日志(结果)可以使用完成,但数组不能为空。它首先:

console.log(
数组(3).fill().map(Math.random)
);我喜欢这样:

[...Array(5).keys()].forEach(index =>
  console.log(`do something ${index}`
)

创建
repeat
功能的现代方法:

repeat = (n, cb) => {[...Array(n)].forEach(cb)}
然后,您可以将其用于:

repeat(3, _ => console.log(Math.random()))
将输出:

0.6324464592887568
0.5969209806782131
0.7362755801487572

可能的副本。这个问题比你的问题稍微多一些,但概念(创建一个n个元素的数组)是相同的。最后,只需使用
Array(n+1)
@SimpleCoder:我在问题陈述中明确拒绝了
[1,1,1].map(Math.random)
,因为这是浪费。
Array(3.map)(Math.random)
有何不同?当然,我知道,对于n*=3,浪费可以忽略不计,但对于较大的*n,则不是如此。@kjo:明显的区别在于,您不必显式地编写每个元素<代码>数组(100)
[1,2,3,4,5,6,7,…100]
简单得多。至于你所说的“浪费”,我不明白问题所在。你认为有没有什么神奇的方法可以在不分配数组的情况下做你想做的事情?@SimpleCoder:David Brown完全理解这个问题……我不认为这是一个习语,也许是一个恶心的词:
var n=5;警报(字符串(数组(n+1)).split(“”).map(数学随机))。现在请原谅我用JSON漱口。我想指出,
n-->0
不是某种箭头运算符,它是
n-->0
。不过,这很酷。有趣的是,您可以将“while(n-->0)”读作“whilen正在接近零”,尽管它在语义上并不准确;)如果可以假定
n
是一个整数,则可以删除
>0
检查,因为当
n
为零时,它将等于false。然而,非整数
n
将导致无限循环。读了这个答案,却不理解其中的一行,我感到非常愚蠢:(@koolaang在第一篇文章中,他们创建了一个函数,它包含两个参数,
n
f
n
是一个整数,
f
是一个函数,并调用
f
n
次。(这是一个ES6箭头函数)在第二种情况下,他们采用的是<>代码>原型> <代码>,所有的JavaScript数字都继承了方法,并添加了一种新的方法,称为<代码>倍/代码>使用<代码>对象。赋值< /代码>。向下投票,因为有更多的最新和更好的答案,投票数更少。是的,它的工作原理就像最终数组上的
.map
,根据我的经验,一些开发人员使用它很困难,一眼就能理解。但是它非常干净,不考虑未经经验开发的可读性。很好的工作,不需要添加npm包。另外,如果你想重新使用更复杂的是,在你的地图中使用
.map((\uu,index)=>returnItem)
喜欢这个!在我看来,这比公认的答案要好。要生成整数,请使用以下内容:
const getRandomIntArray=(max)=>([…数组(3)].map(Math.floor(Math.random()*Math.floor(max)))
这只涵盖了问题的一半。如何使用它来做任何事情5次,而不仅仅是生成一个序列号。
0.6324464592887568
0.5969209806782131
0.7362755801487572