这是我的代码,代理myArray
:
var myArray = [];
var i;
for(i = 0; i < 20; i += 1) {
myArray.push(Math.random());
}
是否存在上述功能等同于没有虚拟变量i
?
收藏的答案:
while(myArray.push(Math.random()) < 20);
$.map(Array(20), Math.random);
for(var myArray = []; myArray.push(Math.random()) < 20;);
答案 0 :(得分:4)
不在ES5中,没有真正的功能等同于它,因为你必须有一些数量为20的东西才能将地图应用到......
var my20ElementArray = [0,1,2,3,4,5,6,7,8,9,10];
var myArray = my20ElementArray.map(Math.random);
你可以在Python中创建一个xrange-like function,但这只会在函数中隐藏这个“未使用”的变量。
答案 1 :(得分:3)
使用JavaScript 1.7,您可以使用Array comprehensions执行此任务:
var myArray = [Math.random() for each (i in range(0, 20))];
但是,使用ES5.1,您可以使用Array
constructor生成任意长度的数组,然后将其映射到随机数。唯一的缺点是map()
不适用于未初始化的值,因此我首先使用join
和split
生成一个空字符串数组:
var myArray = new Array(20).join(" ").split(" ").map(Math.random);
丑陋但短暂。来自Creating range in JavaScript - strange syntax的更好(但不太可理解)的想法:
var myArray = Array.apply(null, {length: 20}).map(Math.random);
从@FelixKlings注释开始,也可以使用不带i
循环变量的单行代码:
for (var myArray=[]; myArray.push(Math.random()) < 20;);
// much better:
for (var myArray=[]; myArray.length < 20;) myArray.push(Math.random());
答案 2 :(得分:1)
您是否正在寻找以下内容:
function makeArray(length, def) {
var array = [];
var funct = typeof def === "function";
while (array.push(funct ? def() : def) < length);
return array;
}
然后您可以按如下方式创建数组:
var array = makeArray(100); // an array of 100 elements
var zero = makeArray(5, 0); // an array of 5 `0`s
在您的情况下,您可以执行以下操作:
var myArray = makeArray(20, Math.random);
请参阅以下小提琴:http://jsfiddle.net/WxtkF/3/
答案 3 :(得分:1)
怎么样?
它的功能风格,非常简洁。
var makeRandomArray = function(n){
if (n == 0) return [];
return [Math.random()].concat(makeRandomArray(n-1));
};
console.log(makeRandomArray(20))
答案 4 :(得分:0)
你可以尝试:
var myArray = String(Array(20)).split(',')
.map( () => Math.random() );
或者用以下内容扩展Array原型:
Array.prototype.vector = function(n,fn){
fn = fn || function(){return '0';};
while (n--){
this.push(fn());
}
return this;
}
// usage
var myArray = [].vector(20, () => Math.random());
或尝试一些有趣的事情:
var myArray = function a(n,fn){
return n ? a(n-1,fn).concat(fn()) : [];
}(20, () => Math.random())
或使用Array.from(ES&gt; = 2015)
Array.from({length: 20}).map(() => Math.random())