函数不返回值

铁托·巴特

我正在尝试生成随机值,这是我的代码:

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)); 上调试函数时;它只显示在数组“标签”中,但“数据集”为空。有什么帮助吗?谢谢。

普拉文·库马尔·普鲁索塔曼

您应该执行 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));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章