函数不返回值

时间:2018-08-31 14:57:45

标签: javascript chart.js

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

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

2 个答案:

答案 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));