3

这是我的代码,作用于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;);
4

5 回答 5

4

不在 ES5 中,没有真正等效的功能,因为您必须拥有数量为 20 的东西才能将 map 应用于...

var my20ElementArray = [0,1,2,3,4,5,6,7,8,9,10];
var myArray = my20ElementArray.map(Math.random);

您可以在 Python 中创建一个类似 xrange 的函数,但这只会将这个“未使用”变量隐藏在函数中。

于 2012-08-04T12:50:13.093 回答
3

在 JavaScript 1.7 中,您可以使用数组推导来完成此任务:

var myArray = [Math.random() for each (i in range(0, 20))];

但是,在 ES5.1 中,您可以使用Array构造函数生成任意长度的数组,然后将其映射为随机数。唯一的缺点是它map()不适用于未初始化的值,因此我首先使用joinand生成一个空字符串数组split

var myArray = new Array(20).join(" ").split(" ").map(Math.random);

丑陋,但很短。在 JavaScript中创建范围的一个可能更好(但不太容易理解)的想法- 奇怪的语法

var myArray = Array.apply(null, {length: 20}).map(Math.random);

i从@FelixKlings 评论开始,人们也可以在没有循环变量的情况下使用这个单行代码:

for (var myArray=[]; myArray.push(Math.random()) < 20;);
// much better:
for (var myArray=[]; myArray.length < 20;) myArray.push(Math.random());
于 2012-08-04T12:59:40.953 回答
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/

于 2012-08-04T12:58:06.740 回答
1

这个怎么样?

它的功能风格,非常简洁。

var makeRandomArray = function(n){
    if (n == 0) return [];
    return [Math.random()].concat(makeRandomArray(n-1));
};

console.log(makeRandomArray(20))

http://jsfiddle.net/YQqGP/

​</p>

于 2012-08-05T11:23:28.047 回答
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>=2015)

Array.from({length: 20}).map(() => Math.random())
于 2012-08-04T13:11:53.520 回答