在for循环javascript中创建一个数组

时间:2015-03-16 05:32:21

标签: javascript arrays angularjs html5

我正在尝试从我的角度应用程序中的其余服务创建这样的数据集模式。

示例:

$scope.chartSeries = [
  {"name": "Google", "data": [100, 200, 400, 700, 300]},
  {"name": "Yahoo", "data": [300, 100, null, 500, 200]},
  {"name": "Facebook", "data": [500, 200, 200, 300, 500] },
  {"name": "Microsoft", "data": [100, 100, 200, 300, 200] }
];

现在这是构建类似模式的代码,

 if (datai){ 
    $rootScope.DashboardData =[];
    $rootScope.DashboardData = datai;
    var _fieldData = [];
    widget.chartConfig.series  = [];
    widget.chartConfig.series  = 
    $rootScope.DashboardData.map(function(elm) {
        return { 
            name: elm[widget.seriesname], 
            data:_fieldData.push(elm[widget.dataname])
        };
    });
 }

问题是数据字段没有创建数组。这是上面代码生成的最终输出。

 [{"name": "Google", "data": 1}];

4 个答案:

答案 0 :(得分:3)

push()返回新数组的长度

$rootScope.DashboardData.map(function(elm) 
{
    var _fieldData = [];
    _fieldData.push(elm[widget.dataname]);
    return { name: elm[widget.seriesname], data: _fieldData };
});

或者您可以使用concat()

return { name: elm[widget.seriesname], data: _fieldData.concat(elm[widget.dataname])};                                          

答案 1 :(得分:2)

您正在将_fieldData.push(elm[widget.dataname])分配给data并且.push()方法返回新的数组长度,因此您需要先推送该元素,然后再分配该数组本身。

_fieldData.push(elm[widget.dataname])
 return { name: elm[widget.seriesname], data:_fieldData};
      });

答案 2 :(得分:2)

试试这个,你需要一个dataname

的循环
$rootScope.DashboardData.map(function(elm) 
{
   var _fieldData = [];
   for(var i=0;i<elm[widget.dataname.length;i++)
    {
      _fieldData.push(elm[widget.dataname][i]);
    }    
    return { name: elm[widget.seriesname], data: _fieldData
});

答案 3 :(得分:0)

数组.push()始终返回new length of an array

您应该将该变量推送到_fieldData.push(elm[widget.dataname]);,然后在数据的后期分配该变量。

$rootScope.DashboardData.map(function(elm) 
{
    var _fieldData = [].push(elm[widget.dataname]);
    return { name: elm[widget.seriesname], data: _fieldData }
});