我正在尝试生成随机值,这是我的代码:
function generateData(total) {
var total = total;
var names = ['Antonie Lereno', 'Laura Saucini', 'Marco Mendez Ortega', 'Lucas Simon Jainte', 'Angel Rodriguez', 'Manuel Salgado', 'Rosario Parrales'];
var months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
return {
labels: months,
datasets: (function () {
var ret = [];
for (var i = 0; i < total; i++) {
var background = [Math.round(Math.random() * 254), Math.round(Math.random() * 254), Math.round(Math.random() * 254)];
ret[i] = {
label: names[Math.round(Math.random() * names.length)],
data: (function () {
var dat = [];
for (var j = 0; j < months.length; j++) {
dat[j] = Math.round(Math.random() * 50);
}
return dat;
}),
backgroundColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',0.2)',
borderColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',1)',
borderWidth: 1
};
}
return ret;
})
};
}
当我在console.log(generateData(1))上调试功能时它仅显示在数组“标签”中,但“数据集”为空。 有什么帮助吗? 谢谢。
答案 0 :(得分:2)
您应该执行IIFE。在该函数之后添加一组括号。
datasets: (function () {
var ret = [];
for (var i = 0; i < total; i++) {
var background = [Math.round(Math.random() * 254), Math.round(Math.random() * 254), Math.round(Math.random() * 254)];
ret[i] = {
label: names[Math.round(Math.random() * names.length)],
data: (function () {
var dat = [];
for (var j = 0; j < months.length; j++) {
dat[j] = Math.round(Math.random() * 50);
}
return dat;
}),
backgroundColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',0.2)',
borderColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',1)',
borderWidth: 1
};
}
return ret;
})() // <----------------------- Look here
工作摘要
您无需设置var total = total;
,而请参见以下方法:
function generateData(total) {
var names = ['Antonie Lereno', 'Laura Saucini', 'Marco Mendez Ortega', 'Lucas Simon Jainte', 'Angel Rodriguez', 'Manuel Salgado', 'Rosario Parrales'];
var months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
return {
labels: months,
datasets: (function() {
var ret = [];
for (var i = 0; i < total; i++) {
var background = [Math.round(Math.random() * 254), Math.round(Math.random() * 254), Math.round(Math.random() * 254)];
ret[i] = {
label: names[Math.round(Math.random() * names.length)],
data: (function() {
var dat = [];
for (var j = 0; j < months.length; j++) {
dat[j] = Math.round(Math.random() * 50);
}
return dat;
}),
backgroundColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',0.2)',
borderColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',1)',
borderWidth: 1
};
}
return ret;
})()
};
}
console.log(generateData(5));
答案 1 :(得分:0)
我对您的代码进行了很少的更改。在内部函数中,我将其调整为IIFE
。希望这是您的预期结果。
function generateData (total) {
var total = total;
var names = ['Antonie Lereno', 'Laura Saucini', 'Marco Mendez Ortega', 'Lucas Simon Jainte', 'Angel Rodriguez', 'Manuel Salgado', 'Rosario Parrales'];
var months = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
return {
labels: months,
datasets: (function () {
var ret = [];
for (var i = 0; i < total; i++) {
var background = [Math.round(Math.random() * 254), Math.round(Math.random() * 254), Math.round(Math.random() * 254)];
ret[i] = {
label: names[Math.round(Math.random() * names.length)],
data: (function () {
var dat = [];
for (var j = 0; j < months.length; j++) {
dat[j] = Math.round(Math.random() * 50);
}
return dat;
})(),
backgroundColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',0.2)',
borderColor: 'rgba(' + background[0] + ',' + background[1] + ',' + background[2] + ',1)',
borderWidth: 1
};
}
return ret;
})()
};
}
console.log(generateData(1));