例如,我想创建一些调试数据数组,并且我需要一个函数,该函数仅占用所需数组的长度,并返回带有少量具有随机数据值的道具的对象数组。
有没有一种方法可以使此函数不带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
}
答案 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)
})