JS-在没有for或while循环的情况下重复动作N次?

时间:2018-12-12 01:49:28

标签: javascript loops

例如,我想创建一些调试数据数组,并且我需要一个函数,该函数仅占用所需数组的长度,并返回带有少量具有随机数据值的道具的对象数组。

有没有一种方法可以使此函数不带for循环? 该问题的原因是我有此i变量,而我并不需要。

const generateData = (count) => {
  let data = []
  for (let i = 0; i < count; i++)  
    data.push({
      foo: Math.round(Math.random() * 100),
      bar: Math.random() > 0.5
    })
  return data  

}

5 个答案:

答案 0 :(得分:5)

您可以立即创建所需大小的数组,而不是将每次迭代都放入目标数组中,然后按照所需方式将每个项目映射到随机初始值。

    function initArray(amount) {
        return [...new Array(amount)].map(() => ({
            foo: Math.round(Math.random() * 100),
            bar: Math.random() > 0.5
        }));
    }
    console.log(initArray(5));

实际上,这仍然是一个迭代过程,但具有更多功能。

答案 1 :(得分:4)

如果需要,您可以使用Array.from一次创建数组,而无需声明或使用任何中间变量名称:

const generateData = length => (
  Array.from(
    { length },
    () => ({
      foo: Math.round(Math.random() * 100),
      bar: Math.random() > 0.5
    })
  )
);
console.log(generateData(5));

答案 2 :(得分:1)

您可以生成长度为n的数组,并将其map()生成随机对象。

const createRandomArray = n => arr = [...Array(n)].map(() => ({
  foo: Math.round(Math.random() * 100),
  bar: Math.random() > 0.5
}));

console.log(createRandomArray(3));

答案 3 :(得分:0)

您可以创建一个递归函数:

const generateData = (count) => {
  let data = []
  function recursive(num) {
    if (num > 1) {
      num--;
      data.push({
        foo: Math.round(Math.random() * 100),
        bar: Math.random() > 0.5
      })
      recursive(num);
    }
    else {
      data.push({
        foo: Math.round(Math.random() * 100),
        bar: Math.random() > 0.5
      })
      return;
    }
  }
  recursive(count);
  return data  

}

相对较大,但是要查看所有操作都非常简单。

答案 4 :(得分:0)

var timer = null;
		const generateData = (count,cb) => {
		  	let data = [];
		  	var num = 0;
		  	timer = setInterval(function(){
		    	if(num>=count){
		       		clearInterval(timer);
		       		cb(data)
		     	}else{
		      		data.push({
		         		foo: Math.round(Math.random() * 100),
		         		bar: Math.random() > 0.5
		       		})
		       		num++;
		     	}
		  	},10)
		}
		generateData(5,function(data){
			console.log(data)
		})