【问题标题】:Uncaught Error: Every row given must be either null or an array未捕获的错误:给定的每一行必须为空或数组
【发布时间】:2018-08-13 19:28:05
【问题描述】:

我在尝试迭代和添加动态数据时遇到了这个问题。以下是面临的例外情况:

Uncaught Error: Every row given must be either null or an array.

演示:https://plnkr.co/edit/vvY6Bg3uzVDSMwDh3EI6?p=preview

js代码:

var list = [
            {id:'January',min: 10, max:20, start:15,end:10},
            {id:'Feb',min: 11, max:4, start:15,end:4},
            {id:'March',min: 10, max:20, start:15,end:10},
            {id:'APril',min: 5, max:20, start:55,end:10}
        ];

       angular.forEach(list, function (value, key) {
     // data.addRows([{"v":value.min}, {"v":value.max},{"v":value.start},{"v":value.end}]);       
     data.addRows([value.min,value.max,value.start,value.end]);
       });

关于如何解决上述异常的任何意见?

【问题讨论】:

    标签: javascript angularjs foreach


    【解决方案1】:

    您需要将数组数组传递给addRows,这样您就可以摆脱forEach。您可以使用map 将对象数组转换为数组数组。

    您似乎也有 5 列,但只传入了 4 个值。

    固定的代码是这样的:

    var list = [
        {id:'January',min: 10, max:20, start:15,end:10},
        {id:'Feb',min: 11, max:4, start:15,end:4},
        {id:'March',min: 10, max:20, start:15,end:10},
        {id:'April',min: 5, max:20, start:55,end:10}
    ];
    
    data.addRows(list.map(function(value) {
      return [value.id,value.min,value.max,value.start,value.end];
    }));
    

    或者

    data.addRows(list.map(value => [value.id,value.min,value.max,value.start,value.end]));
    

    演示:https://plnkr.co/edit/QGlz4fQ81vpmhvxyt4kB?p=preview

    【讨论】:

      【解决方案2】:

      看起来您有 5 列和每行 4 个值?

      var data = new google.visualization.DataTable();
      data.addColumn('string', 'Topping');
      data.addColumn('number', 'Nescafe Instant');
      data.addColumn('number', 'Folgers Instant');
      data.addColumn('number', 'Nescafe Beans');
      data.addColumn('number', 'Folgers Beans');
      
         var list = [
              {id:'January',min: 10, max:20, start:15,end:10},
              {id:'Feb',min: 11, max:4, start:15,end:4},
              {id:'March',min: 10, max:20, start:15,end:10},
              {id:'APril',min: 5, max:20, start:55,end:10}
          ];
      
         angular.forEach(list, function (value, key) {
              var weekData = {};
        // data.addRows([{"v":value.min}, {"v":value.max},{"v":value.start},{"v":value.end}]);       
       data.addRows([value.min,value.max,value.start,value.end]);
      

      您需要为每一行添加一个Topping 值吗?

      this DataTable example 中的格式看起来略有不同,但似乎适用相同的原则。

      编辑

      它需要一个数组数组。你给它一个数组。 Here's a forked version 有效:

         var data = new google.visualization.DataTable();
          data.addColumn('string', 'Topping');
          data.addColumn('number', 'Nescafe Instant');
          data.addColumn('number', 'Folgers Instant');
          data.addColumn('number', 'Nescafe Beans');
          data.addColumn('number', 'Folgers Beans');
      
             var list = [
                  {id:'January',min: 10, max:20, start:15,end:10},
                  {id:'Feb',min: 11, max:4, start:15,end:4},
                  {id:'March',min: 10, max:20, start:15,end:10},
                  {id:'APril',min: 5, max:20, start:55,end:10}
              ];
      
              var allRows = [];
      
             angular.forEach(list, function (value, key) {
                  var weekData = {};
                  allRows.push([value.id,value.min,value.max,value.start,value.end]);
            // data.addRows([{"v":value.min}, {"v":value.max},{"v":value.start},{"v":value.end}]);       
             });
                  data.addRows(allRows);
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2014-12-11
      • 2016-09-14
      • 2018-09-23
      • 2014-01-29
      相关资源
      最近更新 更多